A (10.1.10.28) ◄──────► C (10.1.10.30) -- 雙主
│ │
▼ ▼
B (10.1.10.29) D (10.1.10.31) -- 各掛一從
server_id 唯一 (1,2,3,4)。[mysqld]
server-id = 1 # 各節點唯一
log-bin = mysql-bin
log-slave-updates = 1 # 關鍵:從庫也寫 binlog,支援鏈式複刻
binlog-format = ROW # 建議 ROW 格式
gtid-mode = ON # 5.6+ 建議開啟 GTID
enforce-gtid-consistency = ON
# 複刻過濾 (按業務需求)
replicate-do-db = test
replicate-do-db = test_admin
replicate-wild-do-table = test.%
replicate-wild-do-table = test_admin.%
binlog-ignore-db = mysql
slave-skip-errors = all # 生產慎用,建議具體錯誤碼
STOP SLAVE; RESET MASTER; FLUSH PRIVILEGES;GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'pass';FLUSH TABLES WITH READ LOCK; (記錄 SHOW MASTER STATUS File/Pos)CHANGE MASTER TO MASTER_HOST='10.1.10.28', MASTER_USER='repl', MASTER_PASSWORD='pass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;START SLAVE; UNLOCK TABLES;MASTER_LOG_FILE/POS 取 C 的值。# 在 B 上
CHANGE MASTER TO MASTER_HOST='10.1.10.28', MASTER_USER='repl', MASTER_PASSWORD='pass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
START SLAVE;
| 錯誤 | 原因 | 解決 |
|---|---|---|
| Last_IO_Error: connecting to master retry | 網路/防火牆/帳號密碼/bind-address | 檢查 3306 通達性、授權 IP、錯誤日誌 |
| ERROR 1192: active locked tables | 未 UNLOCK TABLES 就 STOP SLAVE | 先 UNLOCK TABLES |
| ERROR 1064: CHANGE MASTER 語法 | 漏逗號/引號 | 參數用逗號分隔,字串加單引號 |
| ERROR 1198: running slave | 未 STOP SLAVE 就 CHANGE MASTER | 先 STOP SLAVE |
| Fatal error: equal server_ids | server-id 衝突 | SET GLOBAL server_id=新值; 並更新 my.cnf |
| Slave_IO_Running: No | 連接失敗/認證失敗/位點錯誤 | 看 Last_IO_Error, SHOW SLAVE STATUS\G |
SHOW SLAVE STATUS\G
# 關鍵欄位
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Last_IO_Error:
Last_SQL_Error:
auto_increment_offset/increment 錯開自增 ID;rpl_semi_sync_master=ON) 保證資料零丟失。Seconds_Behind_Master、Relay_Log_Space、錯誤計數器。pt-table-checksum 校驗主從一致性。雙主 + 多級從拓撲配置清晰,關鍵在 log-slave-updates、server_id 唯一、過濾規則一致。生產務必評估雙寫風險,引入 GTID/半同步/一致性校驗構建高可用複刻體系。