Analysisbinlog是我在学习binlog event结构及存储的时候,为了更深入理解写的一个对binlog的分析工具,基于python2.7开发,相较于mysqlbinlog工具显示简化很多,可以分析可以对row数据生成回滚语句,可定位组合有下面几个:
Thread_id
Position范围
时间范围
GTID
Position 范围 + thread_id/gtid
时间范围 + thread_id/gtid
显示效果如图:
精简了对我们没多大用的数据,只显示执行语句、GTID、POSITION、thread_id、库表名及对应行数据等记录,如一个事务修改多条记录,那么这几条变更的记录都会在GTID和XID中间显示,行数据内容顺序和字段顺序相对应
我们DBA在工作中有可能会遇到应用发布时出错需要回滚数据或者眼花错删数据这种奇葩情况,这工具也可以对binlog生成回滚语句,打印出的sql语句相对binlog是倒叙的,再也不用怕事务顺序影响回滚了(哈哈....),生成回滚语句的方式也有几个可供选择:
全文件生成回滚语句(需要回滚全文件的可以直接删库跑路了)
Position范围
GTID
Position 范围 + GTID/thread_id
显示效果如图:
生成的回滚语句上分会有对应的GTID号,可以利用它对生成的语句进行校验,我对update_rows_event和insert_rows_event数据的表结构做了判断,如果有primary key字段就使用primary key字段作为where条件,减少了数据内容。
下载地址:https://github.com/wwwbjqcom/scripts.git
使用帮助:
下载到本地后在scripts文件夹里有个Analysisbinlog.py的文件,先安装python的MySQLdb模块,生成回滚语句需要获取表结构时要用到,先添加可执行权限
> chmod +x Analysisbinlog.py
> ./Analysisbinlog.py -h #显示所有参数项,如下图
> ./Analysisbinlog.py -f /usr/local/mysql/data/localhost-bin.000001 #只添加文件参数将分析binlog整个文件内容
> ./Analysisbinlog.py -f /usr/local/mysql/data/localhost-bin.000001 --start-position 2221 --stop-position 2786 #打印某个position范围内的内容
其余参数组合可以自己测试,如果positon和datetime范围都有指定,优先position范围分析
由于生成回滚语句需要提取表结构,所以必须提供连接数据库的参数项
> ./Analysisbinlog.py -f /usr/local/mysql/data/localhost-bin.000001 -r --user ‘root‘ --passwd ‘root‘ --host ‘localhost‘ --port 3306
-r : 打开回滚模式
后面的--user、--passwd、--host、--port都是必须项,下图我操作的是对position范围生成回滚语句
该工具我没有对set、bit两个字段类型做分析,因为我觉得这两个字段使用的几率很小,如果有需求的话可以联系做添加,如果自己能添加最好,可以深入的对binlog及数据存储做了解,可以参考一下我之前发的<binlog详细解读>,还有一点我在取结构时没有取enum字段的值,所以有该字段类型的回滚语句会有问题,binlog中是存储的索引值,并不是enum设置的值,这个需注意,在使用该工具的时候推荐使用position范围做组合,可以提升定位效率
ps: mysql技术交流qq群479472450,我个人公众号也会发一些研究整理的文章,多多关注