目前针对MySQL误操作回滚,在市场上已经有很多工具可够选择了。大致实现思路都是根据ROW格式binlog进行回滚,基本都是支持DML操作。大致相关工具与文章下面都列出来了。
[1] 彭立勋,MySQL下实现闪回的设计思路
[2] Lixun Peng, Provide the flashback feature by binlog
[3] 王广友,mysqlbinlog flashback 5.6完全使用手册与原理
[4] 姜承尧, 拿走不谢,Flashback for MySQL 5.7
[5] 林晓斌, MySQL闪回方案讨论及实现
[6] xiaobin lin, flashback from binlog for MySQL
[7] mariadb.com, AliSQL and some features that have made it into MariaDB Server
[8] danfengcao, binlog2sql: Parse MySQL binlog to SQL you want
[9] 美团点评,MyFlash——美团点评的开源MySQL闪回工具
下面主要简单介绍两款,一个是Python写的binlog2sql,一个是C写的MyFlash。
一、binlog2sql
binlog2sql工具可以从MySQL binlog解析出你要的SQL,根据不同选项,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。由于是Python开发,安装使用都很简单,并且代码改造也没那么复杂。
如,解析出指定库指定表的操作语句。
1 |
$ python binlog2sql.py -h172.16.201.2 -P3306 -uroot -p'123456' -dsbtest -tsbtest1 --start-file='mysql-bin.000001' |
除了这个简单应用外,也支持特定SQL类型(如DDL、DML;DML也可以分INSERT、UPDATE、DELETE等)、根据时间、Position过滤等。
如果想对其生成对应的回滚语句,加一个rollback参数即可。
1 |
$ python binlog2sql.py -B -h172.16.201.2 -P3306 -uroot -p'123456' -dsbtest -tsbtest1 --start-file='mysql-bin.000001' |
更多详细内容可以看官方文档,总体来说还是很好用的,但也是有不少限制的。
- MySQL Server必须开启,离线模式下不能解析。它主要依靠模拟MySQL Slave读取binlog解析。
- 参数 binlog_row_image 必须为FULL,暂不支持MINIMAL。
- 一次只能选择一个binlog文件。
- 速度慢,对比其他工具。
所以就有了下面介绍的这款MyFlash,美团开发的。
二、MyFlash
看这篇文章“MyFlash——美团点评的开源MySQL闪回工具”,总体来说功能上比binlog2sql更丰富一点,binlog2sql支持的功能它都有。简单列一下对比binlog2sql它更有优势的地方:
- 支持本地解析,不支持远程解析(刚好跟binlog2sql相反)。
- 支持GTID模式。
- 支持多文件处理(暂时还不支持,官方说后面支持,现在时间2018.04.20)。
- 最大的亮点就是比binlog2sql快很多,下面是根据官方给出的100万数据下的测试结果。
binlog2sql | mysqlbinlog | MyFlash |
581.319s | 6.217s | 2.774s |
使用方式也很简单,具体参考MyFlash文档吧。最好两款工具都可以尝试使用对比一下,根据需求选择对应的工具。
最后就是,平时没事多使用使用,准备好命令,相信总有一天你会用上的。千万别等真出问题了,再来找工具,只会增加你的数据恢复时间。