首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 雙主 (互為主從) + 多級從庫架構部署實戰筆記

     編輯:MySQL 資料庫相關知識

拓撲設計

A (10.1.10.28) ◄──────► C (10.1.10.30)   -- 雙主
│                         │
▼                         ▼
B (10.1.10.29)            D (10.1.10.31)   -- 各掛一從
  • A、C 互為主從,雙向同步。
  • B 從 A,D 從 C。
  • 所有節點 server_id 唯一 (1,2,3,4)。

核心配置 (my.cnf)

[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    # 生產慎用,建議具體錯誤碼

雙主建立步驟 (A ↔ C)

  1. 兩側均執行:
    STOP SLAVE; RESET MASTER; FLUSH PRIVILEGES;
  2. 建立同步帳號 (雙向):
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'pass';
  3. A 做主,C 做從:
    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;
  4. C 做主,A 做從:同理操作,注意 MASTER_LOG_FILE/POS 取 C 的值。

單向從庫掛載 (B←A, D←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_idsserver-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;
    ③ 關鍵表單向複刻,僅非核心表雙向。
  • 啟用 GTID + 半同步複刻 (rpl_semi_sync_master=ON) 保證資料零丟失。
  • 監控 Seconds_Behind_Master、Relay_Log_Space、錯誤計數器。
  • 定期 pt-table-checksum 校驗主從一致性。

結語

雙主 + 多級從拓撲配置清晰,關鍵在 log-slave-updates、server_id 唯一、過濾規則一致。生產務必評估雙寫風險,引入 GTID/半同步/一致性校驗構建高可用複刻體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved