前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[MYSQL] 几款免费的mysql binlog回滚工具的使用比较

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

原创
作者头像
大大刺猬
发布2025-03-13 16:28:41
发布2025-03-13 16:28:41
1290
举报

导读

在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参考如下:

代码语言: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 环境测试

代码语言:shell
复制
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'

8.0 环境测试

8.4 环境测试

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

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

评价

分类

得分

说明

流行度

5星

github上start数量为3.4K, 足见其流行度

是否易于使用

4星

未提供二进制包,使用时得配置环境或者提前编译.

兼容性

3星

不支持mysql8.4

维护频率

1星

最后一次是7年前维护了

是否支持离线使用

1星

不支持离线使用

myflash

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

5.7 环境测试

代码语言:shell
复制
./flashback --binlogFileNames=/data/mysql_3308/mysqllog/binlog/m3308.001408 --outBinlogFileNameBase=mysql57
mysqlbinlog -vvv mysql57.flashback

8.0 环境测试

8.4 环境测试

评价

分类

得分

说明

流行度

5星

github上start数量为1.2K, 足见其流行度

是否易于使用

4星

虽然提供了二进制包, 但是只是生成binlog文件, 还需要结合mysqlbinlog来使用

兼容性

5星

连mysql8.4都支持了

维护频率

3星

最后一次维护虽然是5年前了, 但问题相对少很多

是否支持离线使用

5星

支持离线使用

my2sql

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

5.7 环境测试

8.0 环境测试

8.4 环境测试

评价

分类

得分

说明

流行度

4星

github上start数量为700+

是否易于使用

3星

虽然提供了二进制包, 但参数过于复杂

兼容性

5星

支持范围挺广的

维护频率

4星

最后一次维护虽然是3年前了

是否支持离线使用

1星

不支持离线使用

mariadb-binlog

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

5.7 环境测试

代码语言:shell
复制
./mariadb-binlog /data/mysql_3308/mysqllog/binlog/m3308.001408 -vvv --flashback

8.0 环境测试

8.4 环境测试

评价

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

分类

得分

说明

流行度

5星

这可是mariadb啊

是否易于使用

5星

回滚只需要加个--flashback即可

兼容性

3星

虽然支持mariadb和mysql, 但在解析mysql时,会还是有些小问题.

维护频率

5星

官方一直在更新

是否支持离线使用

5星

支持离线使用

pymysqlbinlog

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

总结

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

工具

优点

缺点

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • binlog2sql
    • 5.7 环境测试
    • 8.0 环境测试
    • 8.4 环境测试
    • 评价
  • myflash
    • 5.7 环境测试
    • 8.0 环境测试
    • 8.4 环境测试
    • 评价
  • my2sql
    • 5.7 环境测试
    • 8.0 环境测试
    • 8.4 环境测试
    • 评价
  • mariadb-binlog
    • 5.7 环境测试
    • 8.0 环境测试
    • 8.4 环境测试
    • 评价
  • pymysqlbinlog
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档