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

MySQL 主主同步 (雙主) 配置實戰:auto_increment_offset 避免主鍵衝突與 log-slave-updates 閉環

     編輯:MySQL 資料庫相關知識

MySQL 雙主 (Master-Master) 複製架構部署指南

雙主模式下兩節點互為主從,均可讀寫。核心挑戰:自增主鍵衝突、循環複製、衝突解決。生產環境極力建議單寫入點 (VIP/Proxy 路由所有寫入到一節點),另一節點作熱備,僅讀取流量分攤;若必須雙寫,需應用層保證業務邏輯無衝突 (如分片路由)。

關鍵參數對照 (雙主專用)

參數Node A (192.168.1.134)Node B (192.168.1.138)作用
server-id12全域唯一
auto_increment_offset12自增起始值錯開
auto_increment_increment22自增步長 = 節點數
log-slave-updatesONON將 Relay Log 重寫入 Binlog,形成閉環
sync_binlog11事務提交即刷盤,保證不丟失
replicate-do-dbbusiness_dbbusiness_db只同步業務庫
replicate-ignore-dbmysql,sys,...mysql,sys,...忽略系統庫

自增主鍵分配邏輯

  • Node A 產生 ID:1, 3, 5, 7... (offset=1, increment=2)
  • Node B 產生 ID:2, 4, 6, 8... (offset=2, increment=2)
  • 理論上不衝突,但不保護業務層唯一鍵衝突 (如 email、手機號)。

配置步驟 (GTID 模式)

  1. 雙節點分別配置 my.cnf (參考上表),重啟 MySQL。
  2. 雙向建立同步帳號:
    CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'Passw0rd!';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
  3. Node A 導出資料 → Node B 導入 (或反向),確保初始資料一致。
  4. Node A 執行:
    CHANGE MASTER TO MASTER_HOST='192.168.1.138', MASTER_USER='repl', MASTER_PASSWORD='Passw0rd!', MASTER_AUTO_POSITION=1;
    START SLAVE;
  5. Node B 執行:
    CHANGE MASTER TO MASTER_HOST='192.168.1.134', MASTER_USER='repl', MASTER_PASSWORD='Passw0rd!', MASTER_AUTO_POSITION=1;
    START SLAVE;
  6. 雙邊驗證:SHOW SLAVE STATUS\G 確認 Slave_IO_Running=Yes, Slave_SQL_Running=Yes。

關鍵風險與緩解

風險影響緩解方案
雙寫唯一鍵衝突SQL 線程報錯停止同步應用層分片路由;或改用單寫入點 (MHA/Orchestrator/ProxySQL 自動切換)
循環複製無限增長Binlog 膨脹、效能下降log-slave-updates=ON + gtid-mode=ON 自動去重;監控 Binlog 大小
分裂腦網路分區導致雙主各自接受寫入引入仲裁機制 (MHA/VIP/Keepalived) 確保單活躍主
DDL 鎖衝突雙邊同時 DDL 導致死鎖/停頓統一由單節點執行 DDL,或用 pt-online-schema-change

監控指標

  • Seconds_Behind_Master 雙向監控,設定告警閾值 (如 > 30s)。
  • SHOW MASTER STATUS Binlog 位點/GTID 推進速度。
  • 錯誤日誌 Last_IO_Error、Last_SQL_Error 即時告警。
  • 自增 ID 使用率:SHOW TABLE STATUS LIKE 't'\G 觀察 Auto_increment 接近上限預警。

結論

雙主架構複雜度高、風險大,**強烈建議生產採用「一主一從 + 自動故障切換 (MHA/Orchestrator/ProxySQL/Galera Cluster)」**。僅在雙活資料中心、極低寫入衝突業務、且團隊具備深度運維能力時考慮雙主。

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