首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 雙機熱備份架構設計與實作

     編輯:MySQL 綜合教學

核心概念

雙機熱備份(Master-Master Replication)讓兩台 MySQL 伺服器互為主從,雙向同步資料,提供寫入負載分散與單點故障自動切換能力。關鍵在於避免自增 ID 衝突與處理衝突解決機制。

架構規劃

  • Server A (Master 1): auto_increment_offset = 1, auto_increment_increment = 2
  • Server B (Master 2): auto_increment_offset = 2, auto_increment_increment = 2
  • 兩節點皆啟用 log_bin, log_slave_updates, gtid_mode=ON(MySQL 5.6+)

設定步驟

1. 主機設定檔 (my.cnf)

[mysqld]
server-id=1                    # Server B 設為 2
log-bin=mysql-bin
binlog-format=ROW
gtid_mode=ON
enforce-gtid-consistency=ON
log-slave-updates=ON
auto-increment-increment=2
auto-increment-offset=1        # Server B 設為 2
relay-log=relay-bin
read-only=0                    # 正常雙寫設 0,故障切換時可動態調整

2. 建立複寫帳號

CREATE USER 'repl'@'%' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

3. 啟動複寫 (以 Server A 為例)

CHANGE MASTER TO
  MASTER_HOST='server_b_ip',
  MASTER_USER='repl',
  MASTER_PASSWORD='strong_password',
  MASTER_AUTO_POSITION=1;  -- 使用 GTID
START SLAVE;

高可用性輔助工具

  • MHA (Master High Availability): 自動偵測故障、提升從庫、修正其他從庫指向新主庫。
  • Orchestrator: 視覺化拓撲管理、自動故障轉移、手動遷移支援。
  • ProxySQL / HAProxy: 讀寫分離、連線池、故障時自動路由流量。

常見坑點與對策

問題對策
雙寫衝突 (同一 PK 同時寫入)應用層路由寫入單一主庫;或使用應用級鎖、樂觀鎖
自增 ID 衝突正確設定 offset/increment;改用 UUID 或 Snowflake ID
複寫延遲導致讀取舊資料關鍵查詢強制走主庫;使用半同步複寫 (rpl_semi_sync)
Split-brain 雙主同時掛掉引入第三方仲裁節點 (如 Consul、etcd) 或僅允許單寫模式

監控指標

  • Seconds_Behind_Master = 0 表示同步正常
  • Slave_IO_Running / Slave_SQL_Running 均為 Yes
  • GTID 集合一致性:SHOW MASTER STATUS 與 SHOW SLAVE STATUS 的 Executed_Gtid_Set 比對

結語

MySQL 雙機熱備份能有效提升寫入可用性,但需妥善規劃 ID 分配、衝突處理與故障切換流程。建議搭配 MHA/Orchestrator 實現自動化運維,並定期演練故障切換演練。

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