MySQL日志主要分为4类,使用这些日志文件,可以查看MySQL内部发生的事情。这4类日志分别是:
通过刷新日志,可以强制关闭和重新打开日志文件(或者在某个情况下切换到一个新的日志)。当执行一个 FLUSH LOGS
语句或执行 mysqladmin flush-logs
或 mysqladmin refresh
时,将刷新日志。
默认情况下,二进制日志是关闭的,可以通过修改MySQL的配置文件来启动和设置二进制日志。
my.ini中[MySQLd]组下面有几个设置是关于二进制日志的:
log-bin [=path/[filename] ]
expire_logs_days = 10
max_binlog_size = 100M
log-bin定义开启二进制日志;日志文件后缀为000001,000002...,每启动一次MySQL服务会自动生成一个新的日志文件,后缀名加1递增;filename.index文件内容为所有日志的清单,可以使用记事本打开。
expire_logs_days定义了MySQL清除过期日志的时间,即二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。当MySQL启动或刷新二进制日志时可能删除该文件。
max_binlog_size定义了单个文件的大小限制,如果二进制日志写入的内容大小超出给定值,日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)。不能将该变量设置大于1GB或小于4096B。默认值是1GB。
通过使用SHOW VARIABLES语句可以查询日志设置,执行的语句及结果如下:
SHOW VARIABLES LIKE 'log_%';
提示:数据库文件最好不要与日志文件放在同一个磁盘上,这样,当数据库文件所在的磁盘发生故障时,可以使用日志文件恢复数据。
show binary logs语句可以查看当前的二进制日志文件个数及其文件名。
MySQL二进制日志并不能直接查看,如果要查看日志内容,可以通过mysqlbinlog命令查看,在命令行下执行的语句格式如下:
mysqlbinlog 路径 --不需要加引号,正反斜杆都可以
在MySQL中查看二进制日志,执行语句格式如下:
SHOW BINLOG EVENTS IN 'log_name';
使用 SHOW MASTER STATUS;
可以查看当前的二进制日志POS位置。
使用RESET MASTER语句删除所有二进制日志文件
RESET MASTER
语法格式如下:
RESET MASTER;
执行完该语句后,所有二进制日志将被删除,MySQL会重新创建二进制日志,新的日志文件扩展名将重新从000001开始编号。
使用PURGE MASTER LOGS语句删除指定日志文件
PURGE MASTER LOGS
语法如下:
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
第1种方法指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志文件。
第2种方法指定日期,执行该命令将删除指定日期以前的所有日志文件。
使用mysqlbinlog工具从指定的时间点开始直到现在,或另一个指定的时间点的日志中恢复数据。
mysqlbinlog
恢复数据的语法如下:
mysqlbinlog [option] filename | mysql -u username -p
option是一些可选的选项,filename是日志文件名。
option参数是 --start-date、--stop-date、--start-position、--stop-position。--start-date和--stop-date可以指定恢复数据库的起始时间点和结束时间点。--start-position、--stop-position可以指定恢复数据的开始位置和结束位置。
修改配置文件,可以停止二进制日志,但是需要重启MySQL数据库。MySQL提供了暂时停止二进制日志的功能。通过SET SQL_LOG_BIN语句可以暂停或者启动二进制日志。
SET SQL_LOG_BIN的语法如下:
SET sql_log_bin = {0|1} --0暂停,1启动
在默认情况下,错误日志会记录到数据库的数据目录下。如果没有在配置文件中指定文件名,则文件名默认为hostname.err。
如果执行了 FLUSH LOGS
,错误日志文件会重新加载。
错误日志的启动和停止以及指定日志文件名都可以通过修改my.ini(或者my.cnf)来配置。错误日志的配置项是log-err。如果需要指定文件名,则配置项如下:
[mysqld]
log-error = [path / [file_name]]
修改配置项后,需要重启MySQL服务以生效。
MySQL错误日志是以文本文件形式存储的,可以使用文本编辑器直接查看MySQL错误日志。
如果不知道日志文件的存储路径,可以使用SHOW VARIABLES语句查询错误日志的存储路径。
SHOW VARIABLES
语句如下:
SHOW VARIABLES LIKE 'log_error';
MySQL的错误日志是以文本文件的形式存储在文件系统中的,可以直接删除。
flush logs
只是重新打开日志文件,并不做日志备份和创建的操作。如果日志文件不存在,MySQL启动或者执行 flush logs
时会创建新的日志文件。
在运行状态下删除错误日志文件后,MySQL并不会自动创建日志文件。flush logs
在重新加载日志的时候,如果文件不存在,则会自动创建。如果需要重建日志文件,则需要在服务器端执行以下命令:
mysqladmin -u username -p flush-logs
或者在客户端电路MySQL数据库,执行 flush logs
语句:
flush logs;
MySQL服务器默认情况下并没有开启通用查询日志。如果需要通用查询日志,可以通过修改my.ini(或my.cnf)配置文件来开启。在my.ini(或my.cnf)的 [mysqld] 组下加入log选项,形式如下:
[mysqld]
general-log=1
general_log_file="path/filename.log"
如果不指定目录和文件名,通用查询日志将默认存储在MySQL数据目录中的hostname.log文件中。
通用查询日志中记录了用户的所有操作。通用查询日志是以文本文件的形式存储在文件系统中,可以使用文本编辑器直接打开通用日志进行查看。
通过SHOW VARIABLES语句可以查看通用查询日志开启状态及日志所在路径,语句如下:
SHOW VARIABLES LIKE '%general%';
mysqladmin flush-logs
或者 flush logs;
。MySQL中慢查询日志默认是关闭的,可以通过配置文件my.ini或者my.cnf中的slow-query-log选项启动慢查询日志。另外,还需要配置long_query_time选项指定记录阈值。
在my.ini或者my.cnf开启慢查询日志的配置如下:
[mysqld]
slow-query-log = 1
slow_query_log_file = "path/filename.log"
long-query-time = n --单位为秒,默认值为10秒
mysqladmin flush-logs
或者 flush logs;
语句重建日志文件。