下载
该工具是 go版 MySQL binlog解析工具,通过解析 MySQL binlog ,可以生成原始SQL、回滚SQL、去除主键的INSERT SQL等,也可以生成DML统计信息
git clone https://github.com/liuhr/my2sql.git cd my2sql/ go build .
注意
binlog格式必须为row, 且 binlog_row_image=full, DML统计以及大事务分析不受影响
模拟删除数据
mysql> create table tmp1108 (a int); Query OK, 0 rows affected (0.03 sec) mysql> mysql> mysql> mysql> insert into tmp1108 values (1); t into tmp1108 values (2);Query OK, 1 row affected (0.02 sec) mysql> insert into tmp1108 values (2); Query OK, 1 row affected (0.01 sec) mysql> mysql> mysql> mysql> select * from tmp1108; +------+ | a | +------+ | 1 | | 2 | +------+ 2 rows in set (0.00 sec) mysql> mysql> mysql> mysql> mysql> flush logs; ---为了方便演示,重新生成一个binlog Query OK, 0 rows affected (0.02 sec) mysql> mysql> mysql> mysql> delete from tmp1108; Query OK, 2 rows affected (0.01 sec) mysql> mysql> mysql> mysql> mysql> select * from tmp1108; Empty set (0.00 sec)
查看 当前 binlog 文件
mysql> show master status; +---------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+-------------------+ | binlog.000006 | 440 | | | | +---------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
回滚恢复
进入该目录下(测试环境为 Ubuntu20.04)
cd /my2sql/releases/centOS_release_7.x
解析 binlog 文件
/my2sql -user root -password 123456 -port 3306 -host 127.0.0.1 -databases test -tables tmp1108 -mode repl -work-type 2sql -start-file /var/lib/mysql/binlog.000006 -output-dir /tmp/
生成的 信息文件 放入到 /tmp 目录下
发现出现 biglong_trx.txt, binlog_status.txt,forward.6.sql
文件binlog_status.txt和biglong_trx.txt是事务的统计信息
文件forward.2.sql是binlog解析之后的sql
记录误操作位点
cat binlog_status.txt
发现 pos位置 在 311 到 409 之间出现 delete 操作
查看 日志 再次确认位点
mysqlbinlog /var/lib/mysql/binlog.000006
发现 事务 在 311 到 409 发生了 delete 数据的操作,与 信息文件 中的 位置点 可以对上
生成 闪回sql 文件
./my2sql -user root -password 123456 -port 3306 -host 127.0.0.1 -databases test -tables tmp1108 -mode repl -work-type rollback -start-file /var/lib/mysql/binlog.000006 -start-pos 311 -stop-pos 409 -output-dir /tmp/
生成 闪回sql文件 -work-type 需要换成 rollback 回滚,生成 删除操作的 回滚语句
在目标 /tmp 目录下 生成 rollback.6.sql 文件
查看文件
cat /tmp/rollback.6.sql
确实生成了 回滚语句
恢复
mysql -uroot -p123456 -h127.0.0.1 test < /tmp/rollback.6.sql
验证