如果我们需要配置二进制日志的格式,只需要在 /etc/my.cnf 中配置 binlog_format 参数即可。
vim /etc/my.cnf
#在这个文件中添加一行内容
binlog_format=STATEMENT
#重新启动mysql服务
systemctl restart mysqld.service
cd /var/lib/mysql
#可以看到此时重新生成了一个日志文件binlog.000005,原先是1~4。
#因为它的二进制日志格式改了,他不会再往原来的二进制日志文件写入了,而是写到一个新的日志文件中。
ll
再次查看此系统变量,发现日志格式已经修改为STATEMENT
#先登录mysql
mysql -uroot -p1234
#通过此系统变量,查看当前mysql的版本中默认的日志格式是哪个
show variables like '%binlog\_format%';
1.2.3 查看
由于日志是以二进制方式存储的,不能直接读取,需要通过二进制日志查询工具 mysqlbinlog 来查看,具体语法:
#logfilename:二进制文件名
mysqlbinlog [ 参数选项 ] logfilename
参数选项:
-d 指定数据库名称,只列出指定的数据库相关操作。
-o 忽略掉日志中的前n行命令。
-v 将行事件(数据变更)重构为SQL语句
-vv 将行事件(数据变更)重构为SQL语句,并输出注释信息
测试:接下来呢我们就来设置一下这两种日志格式,来看一下它们之间的区别是什么样子的。
情况1:当前的日志格式是row
第一步:以db01数据库下的stu表为例进行演示。
客户端1:就是登录进mysql执行的命令
mysql -uroot -p1234
#当前的日志格式是row
show variables like '%binlog\_format%';
use db01;
#查看db01数据库下面有哪些表
show tables;
#查看stu表下面有哪些数据
select \* from stu;
第二步:执行更新语句
客户端1:
update stu set age = age +1 where id =1;
第三步:查看二进制日志表记录的是什么内容
客户端2:就是没有登录进mysql执行的命令
cd /var/lib/mysql
ll
#因为二进制日志是第一个日志文件写满了之后会开启一个新的日志文件,所以只需要看最后一个日志文件即可。
#二进制文件不能直接查看使用cat显示的是乱码,需要通过mysqlbinlog 指令来查看
#日志里面是以行的格式显示的,所以看不到sql语句,我们还需要使用-v把它重构为sql语句才能看到
#效果:在日志的最后部分可以看到数据执行前后的变化
mysqlbinlog -v binlog.000004;
可以看出日志格式是row,记录的是记录的是每一行的数据变更,在变更之前怎么样,在变更之后是什么样。
情况2:当前的日志格式是STATEMENT
第一步:修改日志格式为STATEMENT,只需要在 /etc/my.cnf 中配置 binlog_format 参数即可