| 格式 | 記錄內容 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|---|
| STATEMENT | 原始 SQL 語句 | 體積小、易讀、主從版本兼容性好 | 非確定性函數 (NOW、UUID、RAND) 導致主從不一致;需 Row 級鎖 | 簡單業務、跨版本複制 |
| ROW | 每行實際變更 (前後映像) | 最安全、無非確定性問題、支援複制過濾、並行複制效率高 | 體積大 (大批次 UPDATE/DELETE)、無法直接看到 SQL | 生產環境強烈推薦 (MySQL 5.7+ 預設) |
| MIXED | 預設 STATEMENT,遇不安全自動切 ROW | 折中 | 行為難預測、調試複雜 | 過渡期使用 |
建議:binlog_format = ROW + binlog_row_image = FULL (或 MINIMAL 節省空間)。
關鍵限制:從庫重放是單線程串行 (5.6 及之前);5.7+ slave_parallel_workers + slave_parallel_type=LOGICAL_CLOCK 可並行重放。
source_id:transaction_id)。gtid_mode=ON、enforce_gtid_consistency=ON、log_slave_updates=ON。| 參數 | 角色 | 建議值 |
|---|---|---|
server_id | 主/從 | 唯一整數 (如 100, 200) |
log_bin | 主 | mysql-bin |
binlog_format | 主 | ROW |
expire_logs_days | 主 | 7 (配合備份策略) |
max_binlog_size | 主 | 100M |
sync_binlog | 主 | 1 (最安全,效能折中可設 100-1000) |
relay_log | 從 | mysql-relay-bin |
log_slave_updates | 從 | 1 (從庫做其他從庫的主必開) |
read_only | 從 | 1 (防誤寫入,超級用戶除外) |
slave_parallel_workers | 從 | 4~16 (視 CPU 核心) |
slave_parallel_type | 從 | LOGICAL_CLOCK |
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'pass';)。CHANGE MASTER TO ... (或 GTID 模式 MASTER_AUTO_POSITION=1)。START SLAVE; → SHOW SLAVE STATUS\G 確認 Slave_IO_Running=Yes、Slave_SQL_Running=Yes、Seconds_Behind_Master=0。pt-table-checksum 校驗、修復腳本。sync_binlog=1、RAID/雲盤高可靠、定期備份 Binlog。SHOW SLAVE STATUS\G
-- Seconds_Behind_Master, Slave_IO_Running, Slave_SQL_Running, Last_IO_Error, Last_SQL_Error
-- Relay_Log_Space (積壓大小)
接入 Prometheus mysqld_exporter 告警:Seconds_Behind_Master > 30、Slave_*_Running != Yes。
Binlog 是 MySQL 高可用、災備、數據集成的**核心樞紐**。選對格式 (ROW)、開啟 GTID、配置並行複制、做好監控校驗,構建穩健的主從架構。