外观
日志文件
MySQL提供了日志文件来帮助开发人员更好地定位MySQL的错误信息和检查运行性能。
错误日志
错误日志对MySQL的启动、运行、关闭过程都有记录。开发人员在遇到问题时应该首先查看该文件以便定位问题。该文件不仅记录了所有的错误信息,也记录了一些警告信息或正确的信息。可以通过以下的命令查看错误日志路径。
SHOW VARIABLES LIKE '%log_error%';
重启MySQL,就会在错误日志中找到MySQL重启的信息。
慢查询日志
MySQL提供了记录慢查询的文件,该文件会记录查询时长超过long_query_time的SQL语句,默认是关闭的。若SQL查询的时间操作了设置的阈值,就会被记录到慢查询日志中。
可以通过以下语句查看慢查询日志是否开启,以及日志文件位置。
SHOW VARIABLES LIKE '%slow_query_log%';
慢查询日志默认是关闭的,可通过下面的语句开启。
SET GLOBAL slow_query_log = ON;若在设置时提示ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation,则需要以管理员身份运行cmd,然后在此cmd中登录MySQL,再尝试设置即可。
MySQL中慢查询的时长阈值是靠变量long_query_time控制的,单位是秒,默认是10,可以通过下面的语句查看。
SHOW VARIABLES LIKE '%long_query_time%';
可通过下面的语句修改为1秒。
SET GLOBAL long_query_time = 1;查询日志
查询日志会记录发送给MySQL服务器的所有SQL,因为SQL量大,默认是不开启的。若一个问题反复出现(如事务不结束),就需要把查询日志打开,即使事务没有提交,一样会写到查询日志,这样就可以定位出现问题的SQL语句。
MySQL有三个参数可以设置general log。
- general_log:用于开启general log。ON表示开启,OFF表示关闭。
- log_output:日志输出的模式。FILE表示输出的文件,TABLE表示输出到MySQL库的general_log表,NONE表示不记录。
- general_log_file:日记输出文件的路径,设置log_output为FILE时才会输出到此文件。
可以使用如下命令查看general_log是否开启。
show variables like '%general%';
若general_log是关闭的,可以通过以下的命令开启。
set global general_log = ON;大多数情况都是临时开启general log,需要记得关闭,并把日志文件输出模式恢复为FILE,命令如下。
set global general_log = OFF;
set global log_output = 'FILE';二进制日志
二进制日志包含描述数据库更改的事件,如表创建操作或表数据更改。除非使用基于行的日志记录,否则它还可能包含已进行更改的语句的事件(如,不匹配任何行的DELETE)。另外,二进制日志还包含关于每个语句花费多长时间更新数据的信息。二进制日志有以下几个用途。
- 恢复:某些数据的恢复需要二进制日志。例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复。
- 复制:其原理和恢复类似,通过复制和执行二进制日志,使一台远程的MySQL数据库(一般称为slave或standby)与一台数据库(一般称为master或primary)进行实时同步。
- 审计:用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击。
使用以下命令查看二进制日志是否开启。
show variables like 'log_bin';
默认情况下二进制日志是开启的。
使用以下命令查看二进制日志文件名。
show binary logs;
运行结果如上图。以后每次操作相关的表时,File_size都会增大。
此外,还可以使用如下命令对日志进行回放。
SHOW BINLOG EVENTS [IN 'log_name'];为了保证数据的安全,需要定时对数据进行备份。备份的方式有很多种,效果也不一样。若数据库中的数据发生了错误,需要使用备份好的数据进行数据还原,以将损失降到最低,过程中还可能涉及到数据库信息的导入和导出。本章将介绍数据备份和还原的方法。