MySQL 備份策略通常為「每日全量 + 每小時 Binlog 增量」。故障發生時,需將全量備份恢復後,再通過 mysqlbinlog 回放增量 Binlog 至故障前任意時間點/位置。本文系統講解 mysqlbinlog 核心參數、事件查看、單/多文件回放、遠程讀取與臨時表陷阱。
# 查看所有 Binlog 文件
SHOW BINARY LOGS;
# 查看指定文件事件
SHOW BINLOG EVENTS IN 'mysql-bin.000002' FROM 120 LIMIT 3;
# 事件類型解讀
Format_desc | Query(BEGIN/COMMIT) | Table_map | Write/Update/Delete_rows | Xid | Rotate
| 參數 | 短參數 | 作用 |
|---|---|---|
--verbose | -v | Row 事件重構為註釋 SQL(雙 -vv 含元數據) |
--database=db | -d db | 僅輸出指定庫事件(Row 格式保證一致性) |
--start-datetime | 恢復起始時間(如 '2023-01-01 10:00:00') | |
--stop-datetime | 恢復結束時間 | |
--start-position | -j | 恢復起始位點 |
--stop-position | 恢復結束位點 | |
--read-from-remote-server | 從遠程主庫讀取 Binlog(需連接參數) | |
--force-read | -f | 遇不可識別事件警告繼續,不中止 |
--no-defaults | 不讀取配置文件(避免密碼洩露) |
# 1. 單文件回放至 MySQL
mysqlbinlog --no-defaults -d db -f \
--start-position=120 --stop-datetime='2023-01-01 12:00:00' \
mysql-bin.000001 | mysql -u root -p
# 2. 多文件同時回放(避免臨時表丟失)
mysqlbinlog --no-defaults -d db -f \
--start-position=120 --stop-datetime='2023-01-01 12:00:00' \
mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 | mysql -u root -p
# 3. 通配符批量(按順序)
mysqlbinlog mysql-bin.00000[1-3] ... | mysql -u root -p
# 4. 先導出 SQL 再執行(適合小量/需審核)
mysqlbinlog ... > /tmp/recover.sql
mysql> SOURCE /tmp/recover.sql;
--start-position 僅對第一個文件生效,--stop-position 僅對最後一個文件生效-d db 在 Statement/Mixed 格式下可能因跨庫更新導致數據不一致,Row 格式安全--host --port --user --password,建議專用備份賬號--master-data=2)轉載自:CSDN 技術博客