Analysisbinlog 分析及回滚操作介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Analysisbinlog 分析及回滚操作介绍相关的知识,希望对你有一定的参考价值。

Analysisbinlog是我在学习binlog event结构及存储的时候,为了更深入理解写的一个对binlog的分析工具,基于python2.7开发,相较于mysqlbinlog工具显示简化很多,可以分析可以对row数据生成回滚语句,可定位组合有下面几个:

Thread_id

Position范围

时间范围

GTID

Position 范围 + thread_id/gtid

时间范围 + thread_id/gtid

 

显示效果如图:

技术分享

 

精简了对我们没多大用的数据,只显示执行语句、GTIDPOSITIONthread_id、库表名及对应行数据等记录,如一个事务修改多条记录,那么这几条变更的记录都会在GTIDXID中间显示,行数据内容顺序和字段顺序相对应

 

我们DBA在工作中有可能会遇到应用发布时出错需要回滚数据或者眼花错删数据这种奇葩情况,这工具也可以对binlog生成回滚语句,打印出的sql语句相对binlog是倒叙的,再也不用怕事务顺序影响回滚了(哈哈....),生成回滚语句的方式也有几个可供选择:

全文件生成回滚语句(需要回滚全文件的可以直接删库跑路了)

Position范围

GTID

Position 范围 + GTID/thread_id

 

显示效果如图:

技术分享

 

生成的回滚语句上分会有对应的GTID号,可以利用它对生成的语句进行校验,我对update_rows_eventinsert_rows_event数据的表结构做了判断,如果有primary key字段就使用primary key字段作为where条件,减少了数据内容。

 

下载地址:https://github.com/wwwbjqcom/scripts.git

 

使用帮助:

下载到本地后在scripts文件夹里有个Analysisbinlog.py的文件,先安装pythonMySQLdb模块,生成回滚语句需要获取表结构时要用到,先添加可执行权限

> 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范围内的内容

技术分享

 

其余参数组合可以自己测试,如果positondatetime范围都有指定,优先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范围生成回滚语句

技术分享

 

该工具我没有对setbit两个字段类型做分析,因为我觉得这两个字段使用的几率很小,如果有需求的话可以联系做添加,如果自己能添加最好,可以深入的对binlog及数据存储做了解,可以参考一下我之前发的<binlog详细解读>,还有一点我在取结构时没有取enum字段的值,所以有该字段类型的回滚语句会有问题,binlog中是存储的索引值,并不是enum设置的值,这个需注意,在使用该工具的时候推荐使用position范围做组合,可以提升定位效率


ps: mysql技术交流qq群479472450,我个人公众号也会发一些研究整理的文章,多多关注


技术分享


本文出自 “小菜鸟DBA” 博客,请务必保留此出处http://xiaozhong991.blog.51cto.com/2354914/1959716

以上是关于Analysisbinlog 分析及回滚操作介绍的主要内容,如果未能解决你的问题,请参考以下文章

12c#中事务及回滚

[超详细] Git 远程仓库及回滚日志操作

Jenkins使用FTP进行一键部署及回滚(Windows)

大数据必学Java基础(九十七):事务及回滚点

Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践)

linux运维架构之路-K8s滚动更新及回滚