典型鏈式複制架構:A (Master) → B (Slave + Master) → C (Slave)
關鍵點:中間節點 B 必須開啟 log-bin 並啟用 log-slave-updates,才能將從 A 複製來的變更記錄至自身的 Binlog,進而傳遞給下游 C。
在 B 節點的 my.cnf 中加入:
# 啟用二進制日誌(Slave 非強制但多級同步必須)
log-bin = mysql-bin
# 關鍵:將 Slave 執行的更新同步寫入自身 Binlog
log-slave-updates = 1
重啟 MySQL 服務生效。
INSERT INTO test.t VALUES (1);SHOW SLAVE STATUS\G 確認 Slave_IO_Running、Slave_SQL_Running 為 Yes,並查詢資料是否同步。SHOW BINLOG EVENTS IN 'mysql-bin.000001'; 確認包含來自 A 的事件。| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| C 節點資料延遲極大 | B 節點 log-slave-updates 未開啟 |
開啟參數並重啟 B 節點 MySQL |
| B 節點 Binlog 無 A 的事件 | B 未設定 log-bin 或 log-slave-updates |
補全配置、重啟、重新同步 |
| C 節點報錯 Duplicate Entry | 初始化時資料不一致、或重複同步 | 重新從 B 完整同步資料至 C |
| A→B 正常但 B→C 中斷 | 網路、防火牆、server-id 衝突 | 檢查 3306 連通性、確保三節點 server-id 唯一 |
auto_increment_offset/auto_increment_increment 避免主鍵衝突,生產環境建議單寫入點。Seconds_Behind_Master:延遲秒數,應接近 0。Slave_IO_Running / Slave_SQL_Running:必須皆為 Yes。expire_logs_days。Relay_Log_Space。