mysqlbinlog 工具分析binlog日志
MySQL的binlog 日志对于生产环境非常有用,任何时间对数据库的修改都会记录在binglog中;当数据发生增删改,创建数据库对象都会记录到binlog中,数据库的复制也是基于binlog进行同步数据;
和SQL SERVER 数据库开启完整模式的原理一样,每一次的数据的变动都会记录在案;(对数据库的select,show这些操作不会记录在binlog)
下面介绍mysqlbinlog工具查看 二进制日志内容;
检查工作:
1,查看是否开启binlog
show variables like \'log_bin\';
ON 代表开启;OFF 代表没有开启;
如果没开启检查my.cnf文件,我的binlog位置如下:
log_bin = /mysql/log//mysql-bin
2,查看binlog
show binary logs
可见,binlog已经开启了;
示例:
01- 创建数据库db;
create database db default character set utf8mb4;
02- 创建表t1
use db; create table `t1` ( `id` int(11) default null, `name` varchar(20) default null ) engine=innodb default charset=utf8mb4;
03- 插入数据
insert into t1(id,name) select 101,\'tome101\'; insert into t1(id,name) select 102,\'tome102\'; insert into t1(id,name) select 103,\'tome103\'; insert into t1(id,name) select 104,\'tome104\'; insert into t1(id,name) select 105,\'tome105\'; insert into t1(id,name) select 106,\'tome106\'; insert into t1(id,name) select 107,\'tome107\'; insert into t1(id,name) select 108,\'tome108\';
04- 更新数据
update t1 set name=\'jack101\' where id=101; update t1 set name=\'jack103\' where id=103; update t1 set name=\'jack105\' where id=105;
05- 删除数据
delete from t1 where id=102; delete from t1 where id=104; delete from t1 where id=106;
查看当前mysqlbinlog位置
which mysqlbinlog
我是二进制自定义安装的mysql 路径不是默认位置;
完整路径为/mysql/app/mariadb/bin/mysqlbinlog
找到binlog位置,我的binlog位置如下:
把最后一个 binlog : 拷贝到 /tmp 目录下:
查看binlog 日志内容:
/mysql/app/mariadb/bin/mysqlbinlog --no-defaults --database=db --start-datetime=\'2019-04-11 00:00:00\' --stop-datetime=\'2019-04-11 15:00:00\' mysql-bin.000007 | more
发现BINLOG 处的内容我们看不明白。。。^_^
增加 –base64-output=decode-rows –v 选项解析
(base64-output,可以控制输出语句输出base64编码的BINLOG语句;decode-rows:选项将把基于行的事件解码成一个SQL语句)
/mysql/app/mariadb/bin/mysqlbinlog --no-defaults --database=db --base64-output=decode-rows -v --start-datetime=\'2019-04-11 00:00:00\' --stop-datetime=\'2019-04-11 15:00:00\' mysql-bin.000007 | more
变成人类可以读懂的SQL语句了;
PS: 可以把binlog解析后的内容放到一个文件后,在分析,利用如下脚本
/mysql/app/mariadb/bin/mysqlbinlog --no-defaults --database=db --base64-output=decode-rows -v --start-datetime=\'2019-04-11 00:00:00\' --stop-datetime=\'2019-04-11 15:00:00\' mysql-bin.000007 >/tmp/binlog007.sql
也可以根据精确位置 — start-position –stop-position 进行解析;