MyFlash
是由美团点评公司技术工程部开发维护且内部使用的一个回滚 DML 操作的工具,旨在方便且高效地进行数据恢复,已于近日宣布开源。该工具通过解析 v4
版本的 binlog ,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。 开发团队也在其博客上将 MyFlash 与市面上现有的闪回工具进行了对比。目前市面上已有的恢复工具,从实现角度把可划分成如下几类。 ① mysqlbinlog 工具配合 sed、awk 。该方式先将 binlog 解析成类 SQL 的文本,然后使用 sed、awk 把类 SQL 文本转换成真正的 SQL 。
② 给数据库源码打 patch 。该方式扩展了 mysqlbinlog 的功能,增加 Flashback 选项。
③ 使用业界提供的解析 binlog 的库,然后进行 SQL 构造,其优秀代表是 binlog2sql 。
上述几种实现方式,主要是提供的过滤选项较少,比如不能提供基于 SQL 类型的过滤,需要回滚一个 delete 语句,导致在回滚时,需要结合 awk、sed 等工具进行筛选。总结了上述几种工具的优缺点,理想的闪回工具应具有以下特性。
MyFlash 应运而生。 性能对比测试场景使用 testFlashback2 ,插入 100 万条数据: CREATE TABLE `testFlashback2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nameShort` varchar(20) DEFAULT NULL, `nameLong` varchar(260) DEFAULT NULL, `amount` decimal(19,9) DEFAULT NULL, `amountFloat` float DEFAULT NULL, `amountDouble` double DEFAULT NULL, `createDatetime6` datetime(6) DEFAULT NULL, `createDatetime` datetime DEFAULT NULL, `createTimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `nameText` text, `nameBlob` blob, `nameMedium` mediumtext, PRIMARY KEY (`id`) ) ENGINE=InnoDB mysql> select count(*) from testFlashback2; +----------+ | count(*) | +----------+ | 1048576 | +----------+ 1 row in set (0.16 sec) delete from testFlashback2; 测试结果 |