暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

[MYSQL] 几款免费的mysql binlog回滚工具的使用比较

原创 大大刺猬 2025-03-13
642

导读

在mysql日常运维中, 难免遇到需要回滚binlog的时候, 市面上能回滚binlog的工具还挺多的, 但都各种小问题, 今天我就来简单测评一下. 从使用难易度, 兼容性(主要测试5.7, 8.0, 8.4), 流行度, 最近一次维护时间等方面进行综合评价.

回滚难度大的时候, 就备份+日志回放吧. 也可以配置延迟从库.

测试环境说明(均开启gtid):
OS: centos 7.9
mysql 5.7.38
mysql 8.0.28
mysql 8.4.0
测试SQL参考如下:

-- 数据准备 create table db1.t20250313_test_binlog(id int, name varchar(200), update_time datetime); insert into db1.t20250313_test_binlog values(1, 'ddcw', now()); insert into db1.t20250313_test_binlog values(2, 'https://github.com/ddcw', now()); flush logs; begin; delete from db1.t20250313_test_binlog where id=1; commit;

测试数据仅供参考, 实际使用请以自己情况为准. 5.7和8.0是mysql的主流版本, 8.4是LTS的.
这里测试的均为能在互联网上免费下载的.

这里只进行简单的测试, 不会测试复杂事务, 复杂数据类型等情况.

binlog2sql

第一款上场的是 binlog2sql, 这款工具在业内算是很出名的了, 该工具使用python开发的, 是基于python-mysql-replication开发的一款能解析Binlog生成回滚SQL语句的工具.

5.7 环境测试

mysql -h127.0.0.1 -P3308 -uroot -p123456 -e 'select @@version' python binlog2sql.py --flashback -h127.0.0.1 -P3308 -uroot -p123456 -ddb1 --start-file='m3308.001408'

image.png

8.0 环境测试

image.png

8.4 环境测试

8.4环境移除了show master status, 现在是使用show binary log status;来查看位点信息了. 所以会遇到如下报错.
image.png

我们稍微修正下代码再来测试下. 又遇到了pymysqlreplication的编码问题. 这个问题我们就不继续修复了.
image.png

评价

分类 得分 说明
流行度 5星 github上start数量为3.4K, 足见其流行度
是否易于使用 4星 未提供二进制包,使用时得配置环境或者提前编译.
兼容性 3星 不支持mysql8.4
维护频率 1星 最后一次是7年前维护了
是否支持离线使用 1星 不支持离线使用

myflash

MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具. 该工具通过解析v4版本的binlog,完成回滚操作.

5.7 环境测试

./flashback --binlogFileNames=/data/mysql_3308/mysqllog/binlog/m3308.001408 --outBinlogFileNameBase=mysql57 mysqlbinlog -vvv mysql57.flashback

image.png

8.0 环境测试

image.png
image.png

8.4 环境测试

image.png
image.png

评价

分类 得分 说明
流行度 5星 github上start数量为1.2K, 足见其流行度
是否易于使用 4星 虽然提供了二进制包, 但是只是生成binlog文件, 还需要结合mysqlbinlog来使用
兼容性 5星 连mysql8.4都支持了
维护频率 3星 最后一次维护虽然是5年前了, 但问题相对少很多
是否支持离线使用 5星 支持离线使用

my2sql

my2sql是go版MySQL binlog解析工具.基于my2fback、binlog_rollback工具二次开发而来.

5.7 环境测试

image.png

8.0 环境测试

image.png

8.4 环境测试

image.png

评价

分类 得分 说明
流行度 4星 github上start数量为700+
是否易于使用 3星 虽然提供了二进制包, 但参数过于复杂
兼容性 5星 支持范围挺广的
维护频率 4星 最后一次维护虽然是3年前了
是否支持离线使用 1星 不支持离线使用

mariadb-binlog

mariadb的mysqlbinlog是支持回滚binlog的. 使用的时候加个 --flashback 即可

5.7 环境测试

./mariadb-binlog /data/mysql_3308/mysqllog/binlog/m3308.001408 -vvv --flashback

image.png

8.0 环境测试

image.png

8.4 环境测试

image.png

评价

上面没有做完整的验证, 实际上还得考虑写入数据库的场景. (得去掉gtid,check_constraint_checks之类的)

分类 得分 说明
流行度 5星 这可是mariadb啊
是否易于使用 5星 回滚只需要加个–flashback即可
兼容性 3星 虽然支持mariadb和mysql, 但在解析mysql时,会还是有些小问题.
维护频率 5星 官方一直在更新
是否支持离线使用 5星 支持离线使用

pymysqlbinlog

最后来个私货:pymysqlbinlog 相当于给mysqlbinlog加个flashback功能, 但流行度很低, 未知问题挺多的. 对binlog结构感兴趣的,可以选择此工具二次开发.
image.png

总结

上述几款工具各有优缺点. 汇总如下:

工具 优点 缺点
binlog2sql 使用广泛 不支持mysql8.4,且长期未维护了
myflash 兼容性好,支持离线解析 无法一步到位,得搭配mysqlbinlog使用
my2sql 兼容性好 不支持离线使用,且参数过于复杂
mariadb-binlog 官方支持的能回滚Binlog的工具 解析的mysql的binlog无法直接回放到数据库
pymysqlbinlog 未知问题多,无相关案例 纯python编写,无依赖

基于python-mysql-replication二次开发的解析binlog的工具市面上还有很多的.

综合来说: 推荐使用myflash或者my2sql

上述评价为个人观点, 仅作参考. 实际使用请根据自己情况来.

参考:
https://github.com/danfengcao/binlog2sql
https://github.com/julien-duponchelle/python-mysql-replication
https://github.com/Meituan-Dianping/MyFlash
https://github.com/liuhr/my2sql
https://mariadb.com

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论