| 日誌類型 | 讀取方法 | 適用場景 | 命令示例 |
|---|---|---|---|
| Binlog (二進制日誌) | 1. mysqlbinlog 命令行工具2. SQL: SHOW BINLOG EVENTS |
主庫:時間點恢復(PITR)、審計、數據變更捕獲(CDC) | mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 154 LIMIT 10; |
| Relay Log (中繼日誌) | 1. mysqlbinlog(5.4.4+ 亦可用 SHOW RELAYLOG EVENTS) |
從庫:排查複製延遲、解析具體執行事件、損壞修復 | mysqlbinlog relay-bin.000002SHOW RELAYLOG EVENTS IN 'relay-bin.000002' LIMIT 5; |
# 1. 指定時間範圍導出(PITR 核心)
mysqlbinlog --start-datetime="2023-01-01 10:00:00" \
--stop-datetime="2023-01-01 11:00:00" \
mysql-bin.000001 > /tmp/recover.sql
# 2. 指定位點範圍
mysqlbinlog --start-position=154 --stop-position=10240 mysql-bin.000001
# 3. 解析 ROW 格式為可讀 SQL(需 --base64-output=DECODE-ROWS -v)
mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001 | grep -A 20 "table_name"
# 4. 遠程讀取主庫 binlog(需 REPLICATION SLAVE 權限)
mysqlbinlog --read-from-remote-server --host=10.0.0.1 --user=repl --password \
--raw --stop-never mysql-bin.000001
# --raw --stop-never 可作為備份流式下載工具
# 5. 導出並直接管道導入另一實例(異構同步)
mysqlbinlog mysql-bin.000001 | mysql -h 10.0.0.2 -u root -p
SHOW BINLOG EVENTS
[IN 'log_name']
[FROM pos]
[LIMIT [offset,] row_count]
SHOW RELAYLOG EVENTS
[IN 'log_name']
[FROM pos]
[LIMIT [offset,] row_count]
適用於快速定位特定位點/事件類型,不需導出完整文件。
mysqlbinlog 讀取本地文件:需文件系統讀權限(通常 root/mysql 用戶)mysqlbinlog --read-from-remote-server:需 REPLICATION SLAVE 權限SHOW BINLOG EVENTS:需 REPLICATION CLIENT 權限SHOW RELAYLOG EVENTS:需 REPLICATION SLAVE 或 REPLICATION CLIENT 權限binlog-format=ROW,配合 mysqlbinlog -v --base64-output=DECODE-ROWS 可完整還原業務 SQL,便於審計與 PITR。expire_logs_days=7(或配合備份週期),防止磁盤寫滿。gtid_mode=ON,複製定位不再依賴文件名+位點,mysqlbinlog --include-gtids 支援按 GTID 集合導出。--ssl-mode=REQUIRED),防止數據明文洩露。