开源最前线(ID:OpenSourceTop) 猿妹 整编
综合自:美团点评技术团队、GitHub等
MyFlash 是由美团点评公司技术工程部开发维护且内部使用的一个回滚 DML 操作的工具,旨在方便且高效地进行数据恢复,已于近日宣布开源。该工具通过解析 v4 版本的 binlog ,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。
MySQL 极速闪回工具 MyFlash
授权协议:未知
开发语言:C/C++
操作系统:跨平台
开发厂商:美团
Github:https://github.com/Meituan-Dianping/MyFlash
闪回工具现状
开发团队也在其博客上将 MyFlash 与市面上现有的闪回工具进行了对比。目前市面上已有的恢复工具,从实现角度把可划分成如下几类。
① mysqlbinlog 工具配合 sed、awk 。该方式先将 binlog 解析成类 SQL 的文本,然后使用 sed、awk 把类 SQL 文本转换成真正的 SQL 。
优点:当 SQL 中字段类型比较简单时,可以快速生成需要的 SQL ,且编程门槛也比较低。
缺点:当 SQL 中字段类型比较复杂时,尤其是字段中的文本包含 HTML 代码,用 awk、sed 等工具时,就需要考虑极其复杂的转义等情况,出错概率很大。
② 给数据库源码打 patch 。该方式扩展了 mysqlbinlog 的功能,增加 Flashback 选项。
优点:复用了 MySQL Server 层中 binlog 解析等代码,一旦稳定之后,无须关心复杂的字段类型,且效率较高。
缺点:在修改前,需要对 MySQL 的复制代码结构和细节需要较深的了解。版本比较敏感,在 MySQL 5.6 上做的 patch ,基本不能用于 MySQL 5.7 的回滚操作。升级困难,因为 patch 的代码是分布在 MySQL 的各个文件和函数中,一旦 MySQL 代码改变,特别是复制层的重构,升级的难度不亚于完全重新写一个。
③ 使用业界提供的解析 binlog 的库,然后进行 SQL 构造,其优秀代表是 binlog2sql 。
优点:使用业界成熟的库,因此稳定性较好,且上手难度较低。
缺点:效率往往较低,且实现上受制于 binlog 库提供的功能。
上述几种实现方式,主要是提供的过滤选项较少,比如不能提供基于 SQL 类型的过滤,需要回滚一个 delete 语句,导致在回滚时,需要结合 awk、sed 等工具进行筛选。
总结了上述几种工具的优缺点,理想的闪回工具应具有以下特性:
● 无需把 binlog 解析成文本,再进行转换。
● 提供原生的基于库、表、SQL 类型、位置、时间等多种过滤方式。
● 支持 MySQL 多个版本。
● 对于数据库的代码重构不敏感,利于升级。
● 自主掌控 binlog 解析,提供尽可能灵活的方式。
● MyFlash 应运而生。
MyFlash 限制
● binlog格式必须为row,且binlog_row_image=full
● 仅支持5.6与5.7
● 只能回滚DML(增、删、改)
FAQ
支持gtid吗?
答:支持。请参考:https://github.com/Meituan-Dianping/MyFlash/blob/master/doc/how_to_use.md
在开启gtid的MySQL server上,应用flashback报错,错误为:ERROR 1782 (HY000) at line 16: @@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON. ?
答:在导入时加入--skip-gtids mysqlbinlog --skip-gtids | mysql -uxxx -pxxx
如果回滚后的binlog日志尺寸超过20M,在导入时,很耗时。如何处理?
答:参考https://github.com/Meituan-Dianping/MyFlash/blob/master/doc/how_to_use.md,搜索maxSplitSize。使用该参数可以对文件进行切片
附:新开源报道汇总

●本文编号94,以后想阅读这篇文章直接输入94即可
●输入m获取文章目录
↓↓↓ 点击"阅读原文" 进入GitHub详情页 
继续阅读
阅读原文