mysqlbinlog - 解析並應用二進制日誌RESET MASTER; -- 清空現有日誌 (謹慎使用) SHOW BINARY LOGS; -- 列出日誌檔案 SHOW BINLOG EVENTS; -- 查看第一個日誌事件 SHOW BINLOG EVENTS IN 'bin.000002' FROM 120 LIMIT 2,3; -- 進階查看
| 參數 | 說明 |
|---|---|
-v / -vv | Verbose:Row 格式重構為偽 SQL (雙 v 含元資料) |
--read-from-remote-server | 從遠端讀取 (需配合 -h -u -p -P) |
-d db_name | 僅輸出指定資料庫事件 (Row 格式保證一致性) |
-f / --force-read | 遇無法識別事件警告並繼續 (預設中止) |
--no-defaults | 不讀取配置檔 (除 .mylogin.cnf) |
--start-datetime / --stop-datetime | 時間點範圍恢復 |
-j N / --start-position=N | 起始位置 (位元組偏移) |
--stop-position=N | 結束位置 |
mysqlbinlog bin.000001 | mysql -u root -p # 或先導出 SQL 再執行 mysqlbinlog bin.000001 > /tmp/bin.000001.sql mysql> SOURCE /tmp/bin.000001.sql;
# 正確:單次調用處理多檔 mysqlbinlog bin.000001 bin.000002 bin.000003 \ --start-position=120 --stop-datetime='2024-01-15 10:00:00' \ | mysql -u root -p # 通配符批次 (bash) mysqlbinlog bin.00000[1-3] --start-position=120 | mysql -u root -p
關鍵:多檔案必須單次調用處理,否則連線中斷導致臨時表丟失報錯。
--start-position僅套用第一個檔,--stop-position僅套用最後一個檔。
# 恢復至特定時間 mysqlbinlog bin.000001 --stop-datetime='2024-01-15 14:30:00' | mysql -u root -p # 恢復特定時間區間 mysqlbinlog bin.000001 \ --start-datetime='2024-01-15 10:00:00' \ --stop-datetime='2024-01-15 14:30:00' | mysql -u root -p
# 從特定位置恢復 mysqlbinlog bin.000001 --start-position=238 | mysql -u root -p # 位置區間恢復 mysqlbinlog bin.000001 --start-position=238 --stop-position=484 | mysql -u root -p
--start-position 或 --start-datetime)mysqlbinlog --base64-output=decode-rows -v:深度解析 Row 事件grep 過濾特定表/操作:mysqlbinlog bin.000001 | grep -A5 'table_name.*users'