导航
导航
文章目录
  1. 限制(对比mysqlbinlog)
  2. 优点(对比mysqlbinlog)
  3. 注意点:
  4. 测试结果

binlog2sql选型报告

最近参与一个产品项目,解决一个技术痛点,对于binlog解析的需求。

本来打算用官方mysqlbinlog来解析,配合我们程序经行格式化梳理,再生成可筛选的sql脚本,实现误删除快速恢复等功能。不过后来卡在格式化梳理这块了,因为没有规律,确实比较难,单纯用mysqlbinlog解析等于就是把命令行 给搞到界面上了,没有任何意义了。

经过一段事件研究,发现了几款开源工具比较适合我们需求,虽然MyFlash解析速度最快,但是仅支持5.7,意义就不大了,综合看下来,binlog2sql这款最适合。这个功能就是实现Oracle里面的flashback,非常具有卖点。

简单介绍下binlog2sql,从MySQL binlog解析出你要的SQL。根据不同选项,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等(摘自github资料)

限制(对比mysqlbinlog)

  • mysql server必须开启,离线模式下不能解析
  • 参数 binlog_row_image 必须为FULL,暂不支持MINIMAL
  • 解析速度不如mysqlbinlog

优点(对比mysqlbinlog)

  • 纯Python开发,安装与使用都很简单
  • 自带flashback、no-primary-key解析模式,无需再装补丁
  • flashback模式下,更适合闪回实战
  • 解析为标准SQL,方便理解、筛选
  • 代码容易改造,可以支持更多个性化解析

注意点:

1 drop truncate无法生成回退sql,日志中显示的只有实际执行语句。

2 执行binlog2sql的时候无需拷贝binlog,直接执行即可

3 多个binlog的话,那就指定一个stop-file,注意stop-file一定要比start-file大,不然的话虽然不报错,但是输出为空

4 恢复的难点,第一个,你要确认好那个点,第二个,对于正在进行的业务来说,无法进行恢复,因为一直在更新,日志在变化,无法确认终止的binlogfile

5 支持MySQL5.6,5.7。 而 8.0暂时没有测试

测试结果