目录
一、错误日志
错误日志是MySQL最重要的日志之一,一般记录在MySQL服务器启动和停止时,以及MySQL在运行过程中发生任何严重错误时的相关信息。当数据库发生故障导致无法正常使用时,可以首先查看此日志。
1.启动和设置错误日志
在MySQL中,错误日志默认是开启的,并且该类型日志也无法被禁止。
默认情况下,错误日志文件一般放在MySQL服务器的数据文件加(data)下,文件名为host_name.err,host_name表示服务器主机名。例如,MySQL所在的服务器主机名为ccy,则错误日志文件名为ccy.err。
可以通过修改配置文件my.ini来自定义日期文件的名称和存储位置,具体方法为,在[mysqld]组下添加内容修改参数值,形式如下:
[mysqld]
#错误日志文件
log_error = [path/[filename]]
上述语句中,path表示错误日志文件的存储路径,filename表示错误日志文件的名称。
2.查看错误日志
通过查看错误日志文件,可以监视系统运行状态,便于及时发现和修复故障。MySQL中的错误日志文件以文本文件形式存储,可以使用文本编辑器直接查看MySQL错误日志。
如果不知道日志文件的存储路径,可以使用SHOW VARIABLES语句查询错误日志的存储路径,语法形式如下:
SHOW VARIABLES LIKE ‘log_error’;
3.删除错误日志
MySQL中的错误日志文件可以直接删除,但在运行状态下删除日志文件后,MySQL并不会自动创建新的日志文件,此时需要执行以下命令重新创建日志文件:
FLUSH ERROR LOGS;
注:在MySQL5.5.7版本之前,执行FLUSH ERROR LOGS;命令可将错误日志文件重命名为file_name.err_old,并创建新的日志文件。从MySQL5.5.7版本开始,在日志文件存在的情况下,执行FLUSH ERROR LOGS;命令只是重新打开日志文件。
二、二进制日志
二进制日志(GINLOG)记录了所有DDL(对数据库内部对象进行创建、删除、修改等操作)和DML(对数据库中表记录的插入、更新、删除等操作)语句,但不包括数据查询语句。语句以“事件”形式存储,并且记录了语句发生时间、执行时常、操作的数据等。二进制日志对于数据损坏后的恢复起着至关重要的作用。
1.启动和设置二进制日志
默认情况下,二进制日志是关闭的,可以通过在配置文件my.ini中[mysqld]组下添加以下内容,来启动二进制日志:
#开启二进制日志
log_bin [=path/[filename]]
#此处必须指定server_id,这是MySQL5.7.3版本之后的要求
sever_id = 1
上述语句中,path表示二进制日志文件的存储路径,默认位于数据文件夹下;filename表示二进制日志文件名,具体格式为hostname-bin.number,其中number的格式可以为000001、000002、000003等。
另外,通过在配置文件my.ini中[mysqld]组下添加以下内容,可以设置二进制日志的过期天数,以及单个日志文件的大小。具体形式如下:
expire_logs_days = 10
max_binlog_size = 100M
其中,expire_logs_days用于设定二进制日志的天数,超出此天数的二进制文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用该功能,自动删除工作通常发生在启动MySQL或刷新二进制日志时。
max_binlog_size用于定义二进制日志文件的大小,默认为1GB,如果当前二进制文件的大小达到了参数指定的值,系统会自动创建一个新的日志文件。
注:某些二进制文件的大小可能会超出max_binlog_size值,因为一个事务所产生的所有事件都必须要记录在同一个二进制文件中。这种情况下,即便二进制文件的大小超出max_binlog_size的值,也会等到当前事务的所有操作全部写入当前日志文件中后才会重新创建文件。
配置完成后,需要重启MySQL服务器才会生效。执行SHOW VARIABLES语句可查询二进制日志的相关配置,具体语法形式如下:
SHOW VARIABLES LIKE ‘%bin%’;
重新启动MySQL后,可以在MySQL服务器的数据文件夹下看到新生成的后缀名为.000001和.index的两个文件,文件前缀名为hostname-bin。
注:最好将二进制日志文件与数据库文件放在不同的两个磁盘上,这样可以在数据库所属磁盘发生故障时,使用二进制日志文件恢复数据。
2.查看二进制日志
MySQL二进制日志文件存储了数据库的所有变更信息,经常会被用到。启动二进制日之后,系统会自动创建两个文件(hostname_bin.index和hostname_bin.000001)。
注:MySQL服务每重新启动一次,或者日志文件大小超过参数max_binlog_size的上限,以“.000001”为后缀的文件就会增加一个,并且后缀名加1递增。
由于二进制日志以二进制方式存储,不能直接读取,需要使用mysqlbinlog命令查看,语法形式如下:
mysqlbinlog log-file;
其中log-file表示日志文件目录。
注:使用mysqlbinlog命令时不需要登陆MySQL。
3.删除二进制日志
二进制日志会记录大量信息(其中包含一些无用的信息),如果长时间不清理,会浪费许多磁盘空间。用户可以在配置文件中设置参数expire_log_days值,使系统自动删除过期日志文件,也可以手动删除。
1.删除所有日志文件
登录MySQL后,执行RESET MASTER语句可以删除所有二进制日志文件,其语法形式如下:
RESET MASTER;
执行该语句后,系统会将所有二进制日志删除,MySQL会重新创建二进制日志,新的日志文件后缀名将重新从“000001”开始编号。
2.删除指定日志文件
实际应用中,通常不会一次性删除所有日志文件,使用PURGE MASTER LOGS语句可以删除指定的日志文件。其基本语法形式如下:
PURGE {MASTER|BINARY} LOGS {TO ‘log_name’|BEFORE ’date’};
上述语句中,MASTER和BINARY为同义词,TO ’log_name’表示删除比指定文件名编号小的日志文件,BEFORE ‘date’表示删除指定时间之前的日志文件。
注:删除二进制文件后,可能导致数据库崩溃后无法恢复。因此,删除之前应将其和数据库备份。
三、通用查询日志
与二进制日志不同,通用查询日志会记录用户的所有操作。
1.启动和设置通用查询日志
通用查询日志记录了服务器接收到的每一个查询或命令,而不管这些查询或命令是否返回结果,甚至是否包含语法错误。因此,开启通用查询日志会产生很大的系统开销,一般在需要采样分析或跟踪某些特殊的SQL性能问题时才会开启。
默认情况下,通用查询日志时关闭的,可以通过在配置文件中[mysqld]组下添加以下内容开启通用查询日志:
#开启通用查询日志
general_log=1
如要关闭通用查询日志,可将general_log值设置为0。
默认情况下,通常查询日志位于data文件加下,文件名为hostname.log。如果要更改其位置和文件名,可在配置文件中[mysqld]组下设置general_log_file参数:
general_log_file [=path/[filename]]
上述语句中,path为日志文件所在路径,filename为日志文件名。
使用SHOW VARIABLES语句,可以查看通用查询日志是否开启,以及日志文件的路径,基本语法形式如下:
SHOW VARIABLES LIKE ‘%general%’;
2.查看通用查询日志
通用查询日志是以文本文件的形式存储在文件系统中的,用户可以使用文本编辑器直接打开进行查看。
3.删除通用查询日志
由于通用查询日志会记录用户的所有操作,日志文件的大小会快速增长。数据库用户可以通过直接删除文本文件的方式,定期删除通用查询日志,以节省磁盘空间。
数据库用户删除日志文件后,执行以下命令或重启MySQL服务,可以生成新的通用查询日志文件。
FLUSH GENERAL LOGS;
四、慢查询日志
慢查询日志记录查询时常超过指定时间的日志。通过慢查询日志,可以找出哪些语句执行时间较长、执行效率较低,以便进行优化。
1.启动和设置慢查询日志
MYSQL中的慢查询日志默认是关闭的,一般建议开启,它对服务器性能的影响微乎其微。
可以通过在配置文件中[mysqld]组下添加以下内容启动慢查询日志:
#开启慢查询日志
slow_query_log=1
如要关闭慢查询日志,可将slow_query_log值设置为0。
另外,启动慢查询日志时,还需要在配置文件中设置long_query_time项指定记录阈值。该值默认为10,以秒为单位,可以精确到微秒。如果一个查询语句执行时间超过阈值,该查询语句将被记录到慢查询日志中。
默认情况下,慢查询日志文件位于data文件夹下,文件名为hostname-slow.log,也可以在配置文件中设置slow_query_log_file项,为日志文件指定存储路径和文件名,语法形式如下:
slow_query_log_file [=path [/filename]]
其中path指定慢查询日志文件的存储路径,filename指定慢查询日志文件名。
2.查看慢查询日志
默认情况下,慢查询日志同样以文本文件的形式存储在文件系统中,可以使用文本编辑器直接打开查看。
3.删除慢查询日志
由于慢查询日志也是存储在文本文件中,所以可以直接删除,删除后在不重启MySQL服务的情况下,执行以下语句可重新创建日志文件。
FLUSH SLOW LOGS;