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

MySQL 雙主(Master-Master)複制配置完整實戰手冊

     編輯:MySQL 資料庫相關知識

環境

  • Node A:192.168.0.231(server-id=1)
  • Node B:192.168.0.232(server-id=2)
  • MySQL 5.1.21,同步資料庫 test

步驟 1:建立複制帳號並授權

-- On A
GRANT REPLICATION SLAVE, FILE ON *.* TO 'repl1'@'192.168.0.232' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

-- On B
GRANT REPLICATION SLAVE, FILE ON *.* TO 'repl2'@'192.168.0.231' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

步驟 2:配置 my.cnf(雙向相同,關鍵差異標註)

[mysqld]
user = mysql
log-bin = mysql-bin
server-id = 1              -- A=1, B=2
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
log-slave-updates          -- 關鍵:將從庫重放的事件再寫入自身 Binlog,實現雙向傳遞
slave-skip-errors = all    -- 生產慎用,此處為演示
skip-name-resolve
sync_binlog = 1            -- 每次提交刷盤,保證不丟事件
auto_increment_increment = 2
auto_increment_offset = 1  -- A=1, B=2,避免自增 ID 衝突

步驟 3:重啟 MySQL 服務

/usr/local/mysql/bin/mysqld_safe &

步驟 4:鎖表、記錄 Master 狀態、備份資料

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;  -- 記錄 File 與 Position
-- 導出/導入資料,保證兩端一致

步驟 5:配置雙向 CHANGE MASTER TO

-- On A(指向 B)
CHANGE MASTER TO
  MASTER_HOST='192.168.0.232',
  MASTER_USER='repl2',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000004',  -- B 的 File
  MASTER_LOG_POS=595;                  -- B 的 Position
START SLAVE;

-- On B(指向 A)
CHANGE MASTER TO
  MASTER_HOST='192.168.0.231',
  MASTER_USER='repl1',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000007',  -- A 的 File
  MASTER_LOG_POS=528;                  -- A 的 Position
START SLAVE;

步驟 6:驗證雙向同步

SHOW PROCESSLIST\G
-- 關鍵:同時存在 "Waiting for master to send event"(SQL Thread)
-- 和 "Has sent all binlog to slave"(Binlog Dump Thread)

解鎖 UNLOCK TABLES,雙向寫入測試:A 插入 → B 可見;B 插入 → A 可見。自增 ID 交錯(1,3,5... / 2,4,6...),無衝突。

關鍵參數解讀

  • log-slave-updates:雙主必開,否則 A→B 重放的事件不會進 B 的 Binlog,B 無法傳給 A。
  • sync_binlog=1:高可靠,犧牲部分寫入效能。
  • auto_increment_increment/offset:雙主避免主鍵衝突的標準做法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved