MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的,github地址为:https://github.com/Meituan-Dianping/MyFlash。通过该工具,可以实现MySQL数据库的闪回
本文针对多个binlog进行闪回测试。
首先是停从库的slave。然后对该从库克隆。把要回放的binlog压缩下拿到测试环境中。执行如下 逆向操作。
./flashback --databaseNames=jn_wsd --sqlTypes='UPDATE,INSERT,DELETE' --outBinlogFileNameBase=jn_wsd.flashback.000118 --binlogFileNames=/data/mysql-bin.000118
./flashback --databaseNames=jn_wsd --sqlTypes='UPDATE,INSERT,DELETE' --outBinlogFileNameBase=jn_wsd.flashback.000117 --binlogFileNames=/data/mysql-bin.000117
./flashback --databaseNames=jn_wsd --sqlTypes='UPDATE,INSERT,DELETE' --outBinlogFileNameBase=jn_wsd.flashback.000116 --binlogFileNames=/data/mysql-bin.000116
./flashback --databaseNames=jn_wsd --sqlTypes='UPDATE,INSERT,DELETE' --outBinlogFileNameBase=jn_wsd.flashback.000115 --binlogFileNames=/data/mysql-bin.000115 --start-position=183768900 --stop-position=268442340
找到要恢复的点对应的binlog,恢复到的点作为start,该binlog最后一个pos作为stop.
这些命令需要放到脚本里边执行。
然后把逆向好的binlog放到生产上克隆好的机器执行。如下所示
降序执行binlog
mysqlbinlog --skip-gtids jn_wsd.flashback.000118.flashback | mysql -uroot -p123456
mysqlbinlog --skip-gtids jn_wsd.flashback.000117.flashback | mysql -uroot -p123456
mysqlbinlog --skip-gtids jn_wsd.flashback.000116.flashback | mysql -uroot -p123456
mysqlbinlog --skip-gtids jn_wsd.flashback.000115.flashback | mysql -uroot -p123456
一定要写到shell脚本里后台执行。
或者执行
mysqlbinlog --skip-gtids jn_wsd.flashback.000115.flashback jn_wsd.flashback.000116.flashback jn_wsd.flashback.000117.flashback jn_wsd.flashback.000118.flashback | mysql -uroot -p123456
注意需要在shell脚本里边执行这些命令。