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輸出到終端