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

Windows Server 2012 MySQL 雙向同步 (主主復制) 完整配置指南

     編輯:MySQL 綜合教學

Windows Server 2012 MySQL 雙向同步 (主主復制) 完整配置指南

雙主復制 (Master-Master) 實現兩台 MySQL 互為主從,寫入任意一節點自動同步至另一節點。本文記錄 Windows Server 2012 環境下,MySQL 5.6 同版本雙主配置全流程:同步賬號授權、雙向 my.ini 參數、CHANGE MASTER TO 掛載、啟動驗證與測試。

環境準備

節點IP角色
Server A192.168.1.2Master / Slave
Server B192.168.1.3Master / Slave

前提:雙方 MySQL 版本一致 (大版本號相同,如 5.6.x),關閉防火牆 3306 端口或相互放行。

步驟 1:創建同步專用賬號 (兩台均執行)

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

192.168.1.% 允許該網段訪問,生產建議限制具體對端 IP。

步驟 2:配置 my.ini (兩台均配置,server_id 唯一)

Server A (192.168.1.2) my.ini [mysqld] 區段:

log_bin = mysql-bin
server_id = 1
replicate_do_db = ftest          # 只同步 ftest 庫,多庫逗號分隔,可省略同步所有
sync_binlog = 1                  # 事務提交強制刷盤,防數據丟失
log_slave_updates = 1            # 從庫執行的事件寫入自身 Binlog,支撐鏈式/雙主
auto_increment_offset = 1        # 自增起始值
auto_increment_increment = 2     # 自增步長 (雙主設 2,避免主鍵衝突)

Server B (192.168.1.3) my.ini [mysqld] 區段:

log_bin = mysql-bin
server_id = 2                    # 必須不同!
replicate_do_db = ftest
sync_binlog = 1
log_slave_updates = 1
auto_increment_offset = 2        # 起始值 2
auto_increment_increment = 2     # 步長 2

關鍵參數:auto_increment_offset/increment 保證雙主自增主鍵不衝突 (A 產生 1,3,5... B 產生 2,4,6...)。修改後**必須重啟 MySQL 服務**生效。

步驟 3:Server B 掛載 Server A 為主 (啟動從線程)

在 Server B MySQL 客戶端執行:

-- 先查看 Server A 當前 Binlog 位點
SHOW MASTER STATUS\G;
-- 假設 File=mysql-bin.000001, Position=1234

STOP SLAVE;
CHANGE MASTER TO
    MASTER_HOST = '192.168.1.2',
    MASTER_USER = 'repl',
    MASTER_PASSWORD = '123456',
    MASTER_LOG_FILE = 'mysql-bin.000001',
    MASTER_LOG_POS = 1234;
START SLAVE;

步驟 4:驗證 Server B 從狀態

SHOW SLAVE STATUS\G;

關鍵指標:

  • Slave_IO_Running: Yes (IO 線程連接主庫正常)
  • Slave_SQL_Running: Yes (SQL 線程重放事件正常)
  • Seconds_Behind_Master: 0

若 Slave_IO_State 為空、Running 為 No,檢查錯誤日誌、網絡、賬號權限、Binlog 位點是否正確。

步驟 5:Server A 掛載 Server B 為主 (對稱操作)

在 Server A 執行對稱的 CHANGE MASTER TO (指向 192.168.1.3),並 START SLAVE、SHOW SLAVE STATUS\G 驗證。

步驟 6:雙向同步測試

  1. 在 Server A ftest 庫表插入/更新數據 → 觀察 Server B 是否同步。
  2. 在 Server B 修改同表數據 → 觀察 Server A 是否同步。
  3. 驗證自增主鍵無衝突 (A 插入 ID 1,3,5... B 插入 2,4,6...)。

常見問題與避坑

  • server_id 衝突:雙主必須不同,否則報錯 Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs。
  • 循環復制:log_slave_updates=1 導致事件在雙向流轉,需依賴 server_id 去重 (MySQL 內建),但舊版本需注意。
  • 寫入衝突:雙主**不支持**同一行並發寫入 (最後寫入勝,數據易不一致)。**架構建議**:應用層路由寫入 (單主寫、雙主備) 或引入中間件 (ProxySQL、MyCat) 做讀寫分離。
  • 異步復制延遲:網絡抖動導致從庫延遲,關鍵業務讀取需強制走主庫或等待追上。

圖示

授權賬號 授權成功 my.ini 配置 CHANGE MASTER SHOW SLAVE STATUS 啟動從線程 驗證成功 對稱配置 測試同步

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