由于最近线上数据经常被改动,导致程序错误,并且找不出问题根源,因此去拿线上mysql的binlog日志,来分析数据最近做了什么改动,好进一步分析问题原因。
从生产上获取日志
1、查看mysql的配置信息
vi /etc/my.cnf
2、查看binlog日志
呃.......生产上mysql的binlog日志设置了权限,只能申请权限
3、获取binlog日志,将二进制文件进行转换
/usr/local/mysql/bin/mysqlbinlog --no-defaults -d midea_b /data/log/mysql-bin.000051 > binlog20200715.txt
/usr/local/mysql/bin/mysqlbinlog --no-defaults -d midea_b /data/log/mysql-bin.000052 > binlog20200716_1.txt
/usr/local/mysql/bin/mysqlbinlog --no-defaults -d midea_b /data/log/mysql-bin.000053 > binlog20200716_2.txt
/usr/local/mysql/bin/mysqlbinlog --no-defaults -d midea_b /data/log/mysql-bin.000054 > binlog20200717.txt
/usr/local/mysql/bin/mysqlbinlog --no-defaults -d midea_b /data/log/mysql-bin.000055 > binlog20200719.txt
/usr/local/mysql/bin/mysqlbinlog --no-defaults -d midea_b /data/log/mysql-bin.000056 > binlog20200720.txt
导出来后才发现,文件还是看不懂,这就难受了。
--------------------分割线----------------------
mysql二进制日志有三种格式:statement、row、mixed
一般我们在主从复制过程中采用的格式都是mixed。这种格式兼具了基于行(row)和基于语句(statement)的优点,速度和效率是最高的。
但是在使用mysqlbinlog查看混合模式的二进制文件时,基于行的部分默认是以base64编码显示的
--------------------分割线----------------------
因此,要对其进行解码(-v --base64-output=DECODE-ROWS)
/usr/local/mysql/bin/mysqlbinlog --no-defaults -v --base64-output=DECODE-ROWS -d midea_b /data/log/mysql-bin.000051 > binlog20200715.log
/usr/local/mysql/bin/mysqlbinlog --no-defaults -v --base64-output=DECODE-ROWS -d midea_b /data/log/mysql-bin.000052 > binlog20200716_1.log
/usr/local/mysql/bin/mysqlbinlog --no-defaults -v --base64-output=DECODE-ROWS -d midea_b /data/log/mysql-bin.000053 > binlog20200716_2.log
/usr/local/mysql/bin/mysqlbinlog --no-defaults -v --base64-output=DECODE-ROWS -d midea_b /data/log/mysql-bin.000054 > binlog20200717.log
/usr/local/mysql/bin/mysqlbinlog --no-defaults -v --base64-output=DECODE-ROWS -d midea_b /data/log/mysql-bin.000055 > binlog20200719.log
/usr/local/mysql/bin/mysqlbinlog --no-defaults -v --base64-output=DECODE-ROWS -d midea_b /data/log/mysql-bin.000056 > binlog20200720.log
转换后就生成了我们能看懂的sql代码
--binlog日志文件很大,最好还是先根据关键字过滤后再查看