reverse_sql 是一个用于解析和转换 MySQL 二进制日志(binlog)的工具。它可以将二进制日志文件中记录的数据库更改操作(如插入、更新、删除)转换为反向的 SQL 语句,以便对系统或人为产生的误操作进行数据回滚和恢复。
**ps:**二进制日志需要开启(一键脚本安装的MySQL默认开启)
SHOW VARIABLES LIKE ‘log_bin’;
**ps:**二进制日志需要为ROW格式(一键脚本安装的MySQL默认ROW)
SHOW VARIABLES LIKE ‘binlog_format’;
查看二进制日志的路径
SHOW VARIABLES LIKE ‘log_bin_basename’;
定位需要恢复时间段
- 根据二进制日志生成时间确定需要恢复的二进制日志,以ON.000706为例,该日志中记录的为4月13日02:01至4月14日02:00之间的操作
- 在二进制日志的路径下将日志编译成可读的SQL文件
/usr/local/mysql/bin/mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v --skip-gtids ON.000706 >000706.sql
- 查看SQL文件查询具体操作的时间点
**ps:**使用数据库逆向工程工具时必须填写日志的开始时间和结束时间,如果对操作时间较为明确,可以不做时间段的定位
下载数据库逆向工程工具
reverse_sql-reverse_sql_progress.zip
上传文件
- 将下载后的工具上传至home文件夹中,并解压
unzip reverse_sql-reverse_sql_progress.zip
- 将reverse_sql-reverse_sql_progress文件夹下的reverse_sql_progress文件给可执行权限
chmod +x reverse_sql_progress
生成回滚SQL文件
- 在reverse_sql-reverse_sql_progress文件夹下执行生成命令,示例如下:
./reverse_sql_progress -ot ocr_invoice_main -op update -H 127.0.0.1 -P 3306 -u root -p A_isinojs#888 -d stms230302 --binlog-file /home/mysql/mysql8/ON.000706 --start-time “2024-04-13 14:00:01” --end-time “2024-04-13 17:49:00” --print
- 参数说明:
-ot 要恢复的表,多张表用,逗号分隔
-op 误操作时的命令(insert/update/delete)
-H MySQL主机IP
-P MySQL端口号
-u MySQL用户名
-p MySQL密码
-d MySQL数据库名
–binlog-file 需要生成回滚SQL的Binlog文件
–start-time 开始时间
–end-time 结束时间
–print 将解析后的SQL输出到终端