一、使用方法

binlog命令可以在终端执行,也可以在数据库可视化工具中执行:

1、终端执行
1.1、 linux

为防止binlog版本不一致,可以在前面加上/usr/local/mysql/bin/mysqlbinlog,如

 /usr/local/mysql-5.7.26/bin/mysqlbinlog mysql-bin.000002
1.2、 windows

我的mysql5.1配置文件在C:\Program Files\MySQL\MySQL Server 5.1下,而数据目录在C:\ProgramData\MySQL\MySQL Server 5.1\data下。binlog日志有两种执行方法: 

(1) mysqlbinlog配置了环境变量,直接使用:

(2) 通过登录mysql使用:

mysql> show binlog events;   #只查看第一个binlog文件的内容
mysql> show binlog events in 'mysql-bin.000002';#查看指定binlog文件的内容
mysql> show binary logs;  #获取binlog文件列表
mysql> show master status; #查看当前正在写入的binlog文件
2、可视化工具中执行

 如navicat

 

二、常用命令

1、读取日志
1.1、直接读取
mysqlbinlog 文件名 >输出文件名

  如:

1.2、指定时间段和数据库读取日志
mysqlbinlog -d crm mysqld-bin.000001

  或者

mysqlbinlog -database crm mysqld-bin.000001

 如查询2022-03-15 09:00:00到2022-03-17 20:00:00 数据库为 test的操作日志,并输出到屏幕上:

mysqlbinlog --no-defaults --database=test --start-datetime="2022-03-15 09:00:00" --stop-datetime="2022-03-17 20:00:00" mysql-bin.000001   |more

输出到文件中

mysqlbinlog --no-defaults --database=test --start-datetime="2022-03-15 09:00:00" --stop-datetime="2022-03-16 20:00:00" mysql-bin.000001    > test0316.txt
1.3、grep根据关键字搜索
#drop关键字 
指定路径/bin/mysqlbinlog  --no-defaults --base64-output=decode-rows -v 指定路径/mysql_log/mysql3306_bin.000012 | grep -i drop

#drop关键字前后各10行
指定路径/bin/mysqlbinlog  --no-defaults --base64-output=decode-rows -v 指定路径/mysql_log/mysql3306_bin.000012 | grep -i  -A 10 -B 10  drop

 (1)grep -A1 keyword filename  找出filename中带有keyword的行,输出中除显示该行外,还显示之后的一行(After 1);

(2) grep -B1 keyword filename

找出filename中带有keyword的行,输出中除显示该行外,还显示之前的一行(Before 1);

(3)grep -1 keyword filename

找出filename中带有keyword的行,输出中除显示该行外,还显示之前的一行(After 1)和显示之后的一行(After 1);

2、删除binlog文件

注意:binlog文件不可直接删除,否则会导致mysql启动失败,可以通过命令删除。

(1)使用reset master,该命令将会删除所有日志,并让日志文件重新从000001开始。
(2)使用命令

PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }

例如

purge master logs to "mysql-bin.000002" 

将会清空000002之前的所有日志文件.
(3)使用--expire_logs_days=N选项指定过了多少天日志自动过期清空。

3、恢复数据

使用binlog的--start-position=? --stop-position=?命令。

三、常见报错:

1、使用mysqlbinlog命令报错ERROR: Error in Log_event::read_log_event(): 'Sanity check failed', data_len: 31, event_type: 35,原因为版本与数据库版本不匹配导致,如我版本为3.3,使用于mysql5.1的版本,读取mysql5.7的日志会报错

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐