MySQL日志分为4类:
错误日志:记录MySQL服务的启动、运行或停止时出现的问题
查询日志:记录建立客户端连接和执行语句
二进制日志:记录所有要更改数据
慢查询日志: 记录所有支线时间超过long_query_time的所有查询或不使用索引的查询
一、开启二进制日志
作用:记录MySQL数据库的变化,包含了所有更新数据或者已经潜在更新数据
1、启动和设置二进制日志
默认是开启,修改mysql配置文件启动和设置二进制日志
my.ini [mysqld] 组下面的二进制日志设置
log-bin [=path/ [filename] ] expire_logs_days = 10 maxbinlogsize = 1OOM
log-bin定义开启二进制日志
path表明日志文件所在的目录路径
filename指定了日志文件的名称,如文件的全名为filename.000001、filename.000002等
除之外,还有一个名称为filename.index的文件,
文件内容为所有日志的清单,
可以使用记事本打开该文件
expire_logs_days 定义mysql清除过期日志的时间,二进制日志自动删除前的保留天数,默认为0,表示没有自动删除
max_binlog_size定义了单个文件的大小限制,
如果二进制日志写入的内容大小超出给定值,
日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)
不能将该变量设置为大于1GB或小于4096B,默认值是1GB
my.ini 配置文件中 [mysqld]组下
[mysqld] log-bin expire_logs_days = 10 max_binlog_size = 100M
填加完成后,关闭并重新启动mysql服务进程,就可以打开二进制日志。
通过 show variables语句查询日志设置
mysql> SHOW VARIABLES LIKE 'log_%'; +----------------------------------------+----------------------------------------+ | Variable_name | Value | +----------------------------------------+----------------------------------------+ | log_bin | ON | | log_bin_basename | /usr/local/mysql/data/binlog | | log_bin_index | /usr/local/mysql/data/binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | log_error | /usr/local/mysql/data/error.log | | log_error_services | log_filter_internal; log_sink_internal | | log_error_suppression_list | | | log_error_verbosity | 2 | | log_output | FILE | | log_queries_not_using_indexes | OFF | | log_raw | OFF | | log_replica_updates | ON | | log_slave_updates | ON | | log_slow_admin_statements | OFF | | log_slow_extra | OFF | | log_slow_replica_statements | OFF | | log_slow_slave_statements | OFF | | log_statements_unsafe_for_binlog | ON | | log_throttle_queries_not_using_indexes | 0 | | log_timestamps | UTC | +----------------------------------------+----------------------------------------+ 21 rows in set (0.01 sec)
log_bin 为 ON 表示二进制日志已经打开
MySQL重新启动之后,在机器上的MySQL数据文件夹下面看到新生成的文件后缀为.000001和.index的两个文件,文件名称为默认主机名称
提示:数据库文件最好不要与日志文件放在同一个磁盘上,这样当数据库文件所在的磁盘发生故障时,可以使用日志文件恢复数据
二、查看二进制日志
mysql服务重新启动一次,以.000001为后缀的文件都会增加一个,并且后缀名加1递增
日志长度超过max_binlog_size 上限,默认是1GB,会创建新的日志文件
SHOW BINARY LOGS 查看二进制日志文件个数及文件名
mysql> SHOW BINARY LOGS; +---------------+-----------+-----------+ | Log_name | File_size | Encrypted | +---------------+-----------+-----------+ | binlog.000001 | 1171 | No | +---------------+-----------+-----------+ 1 row in set (0.00 sec)
通过mysqlbinlog查看二进制日志:
> mysqlbinlog D:/mysql/log/binglog.000001
三、删除二进制日志
RESET MASTER 删除所有二进制日志文件
PURGE MASTER LOGS只删除部分二进制日志文件
1、使用RESET MASTER 语句删除所有二进制日志文件
RESET MASTER;
重新生成的二进制日志,新的日志文件扩展名重新从000001开始编号
2、使用PURGE MASTER LOGS 语句删除指定日志文件
PURGE {MASTER | BINARY} LOGS TO 'log_name' PURGE {MASTER | BINARY} LOGS BEFORE 'date'
第1种方法指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志文件
第2种方法指定日期,执行该命令将删除指定日期以前的所有日志文件
四、二进制日志恢复数据库
数据意外丢失时,可以通过mysqlbinlog工具从指定的时间开始到现在
从二进制日志恢复数据,需要知道当前二进制日志文件的路径和文件名,一般可以从配置文件(my.cnf或者my.ini,文件名取决于MySQL服务器的操作系统)中找到路径
mysqlbinlog [option] filename |mysql –uuser -ppass
option选项
filename是日志文件名
比较重要的两对option参数是--start-date、与--stop-date、--start-position与--stop-position
--start-date与--stop-date可以指定恢复数据库的起始时间点和结束时间点
--start-position与--stop-position可以指定恢复数据的开始位置和结束位置
实例:使用mysqlbinlog恢复MySQL数据库到2022年1月30日15:27:48时的状态,执行命令及结果如下
mysqlbinlog --stop-date="2022-01-30 15:27:48" D:\mysql\log\binlog\ X0NHUNO7YDZVSSI-bin.000003 | mysql –uuser –ppass
五、暂时停止二进制日志功能
语法:
SET sql_log_bin = {0|1}
暂停记录二进制日志:
mysql> SET sql_log_bin = 0; Query OK, 0 rows affected (0.00 sec)
恢复记录二进制日志:
mysql> SET sql_log_bin = 1; Query OK, 0 rows affected (0.00 sec)