MySQL服务器生成的二进制日志保存在binlog文件中。要以文本格式显示binlog内容可以使用mysql自带的mysqlbinlog日志管理工具解析。
二进制日志格式(binlog_format)在MySQL 5.7.7和更高版本中,默认为row,在row格式下我们要查找历史的SQL记录,需要开启binlog_rows_query_log_events来记录执行过的SQL。
mysqlbinlog用法如下:
shell> mysqlbinlog [options] log_file1 log_file2…
常用选项如下:
--base64-output=name:决定binlog输出格式选项,auto--自动显示binlog语句所有格式;never--禁止显示binlog语句;decode-rows--禁止显示binlog语句--database=db_name, -d db_name:只显示指定数据库的日志--verbose,-v:从行事件中重建伪 sql 语句--verbose --verbose, -vv:从行事件中重建伪 sql 语句,添加对数据类型的注释--start-datetime=datetime --stop-datetime=datetime:指定日期间隔的日志--start-position=N --stop-position=N:指定事件位置间隔的日志--skip-gtids[=(true|false)] :不显示GTID
举例说明mysqlbinlog的使用:
1、创建新日志,对mysql和test数据库做DML操作
mysql> flush logs;Query OK, 0 rows affected (0.01 sec)mysql> create table mysql.test(id int primary key) engine=myisam;Query OK, 0 rows affected (0.40 sec)mysql> insert into mysql.test values(1);Query OK, 1 row affected (0.00 sec)mysql> create table test.test(id int primary key) engine=myisam;Query OK, 0 rows affected (0.37 sec)mysql> insert into test.test values(1);Query OK, 1 row affected (0.33 sec)
a.不加参数显示的binlog日志
mysqlbinlog mysql-bin.000017

b.加参数显示的binlog日志的SQL执行记录
mysqlbinlog mysql-bin.000017 -d test --base64-output=decode-rows --skip-gtids -vv | grep -B 1 -i 'insert into'
