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

Windows MySQL 雙向同步部署詳解:從環境搭建到 IP 變更維護全流程

     編輯:MySQL 資料庫相關知識

架構概覽

節點角色IPServer ID同步賬號
AMaster/Slave192.168.1.1011yw@192.168.1.102
BMaster/Slave192.168.1.1022yw@192.168.1.101

雙向同步 = 兩組單向主從互為備份。核心難點:自增主鍵衝突、雙寫衝突、IP 變更後的重新配置。

階段一:環境搭建與賬號創建

1. 確認基礎條件

  • 同版本 MySQL(文中為 iKEY Server 內置版)
  • 同一局域網,防火牆放行 3306
  • 數據庫實例名一致(ikey_db, ikey_log)

2. 雙向創建同步賬號

-- Node A 執行
GRANT REPLICATION SLAVE ON *.* TO 'yw'@'192.168.1.102' IDENTIFIED BY 'ym';
FLUSH PRIVILEGES;

-- Node B 執行
GRANT REPLICATION SLAVE ON *.* TO 'yw'@'192.168.1.101' IDENTIFIED BY 'ym';
FLUSH PRIVILEGES;

3. 停止雙方服務

net stop mysql

階段二:配置文件部署 (my.cnf)

Node A (複製 my_master.cnf → my.cnf)

log-bin = mysql-bin
binlog-do-db = ikey_db
binlog-do-db = ikey_log
server-id = 1
master-host = 192.168.1.102
master-user = ym
master-password = ym
master-port = 3306
master-connect-retry = 60
replicate-do-db = ikey_db
replicate-do-db = ikey_log

Node B (複製 my_slave.cnf → my.cnf)

log-bin = mysql-bin
binlog-do-db = ikey_db
binlog-do-db = ikey_log
server-id = 2
master-host = 192.168.1.101
master-user = ym
master-password = ym
master-port = 3306
master-connect-retry = 60
replicate-do-db = ikey_db
replicate-do-db = ikey_log

關鍵參數說明

  • log-slave-updates:未顯式配置,但雙向同步建議顯式開啟(=1),確保從庫接收的事件寫入自身 Binlog,支持鏈式傳播
  • auto_increment_increment/offset:文中未配置,極高風險! 雙向寫入必須設置,如 A: increment=2 offset=1,B: increment=2 offset=2

階段三:驗證同步啟動

net start mysql

Node A 檢查 Master 狀態

SHOW MASTER STATUS;
+------------------+----------+------------------+------------------+
| File             | Position | Binlog_Do_DB     | Binlog_Ignore_DB |
+------------------+----------+------------------+------------------+
| mysql-bin.000001 |       98 | ikey_db,ikey_log |                  |
+------------------+----------+------------------+------------------+

Node B 檢查 Slave 狀態

SHOW SLAVE STATUS\G;
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.101
Master_User: ym
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 98
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: ikey_db,ikey_log

階段四:IP 變更維護實戰 (A 節點 101 → 103)

1. 停止雙向同步

-- 兩節點均執行
STOP SLAVE;

2. 記錄當前 Binlog 位點

-- Node A (新 IP 103)
SHOW MASTER STATUS;  -- 記錄 File, Pos (如 mysql-bin.000002, 118)

-- Node B
SHOW MASTER STATUS;  -- 記錄 File, Pos (如 mysql-bin.000003, 98)

3. Node B 更新指向 A 的同步配置

-- 刪除舊賬號
DROP USER 'ym'@'192.168.1.101';
FLUSH PRIVILEGES;

-- 創建新賬號
GRANT REPLICATION SLAVE ON *.* TO 'ym'@'192.168.1.103' IDENTIFIED BY 'ym';
FLUSH PRIVILEGES;

-- 動態修改同步源 (無需改 my.cnf 重啟)
CHANGE MASTER TO
MASTER_HOST='192.168.1.103',
MASTER_USER='ym',
MASTER_PASSWORD='ym',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=118;

-- 更新 my.cnf 持久化
master-host = 192.168.1.103

4. Node A 更新指向 B 的同步配置

CHANGE MASTER TO
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=98;

5. 重啟雙向同步並驗證

-- 兩節點
START SLAVE;
SHOW SLAVE STATUS\G;
-- 確認雙向均為 Yes

關鍵最佳實踐補充(文中缺失但生產必備)

項目建議配置原因
自增衝突防範A: auto_increment_increment=2, auto_increment_offset=1
B: auto_increment_increment=2, auto_increment_offset=2
雙主寫入 ID 不衝突
寫入路由應用層指定單一「主寫節點」,另一節點 read_only=1避免雙寫衝突、死鎖
Binlog 格式binlog_format=ROW語句級復制易導致不一致
GTID 模式gtid_mode=ON, enforce_gtid_consistency=ON簡化故障切換、位點管理
監控告警雙向 Seconds_Behind_Master、IO/SQL 線程狀態及時發現同步延遲/中斷

總結

Windows MySQL 雙向同步配置核心路徑:
雙向賬號 → 雙向 my.cnf (server-id/log-bin/master-host) → 啟動驗證 → IP 變更時 STOP SLAVE → 記錄位點 → 重建賬號 → CHANGE MASTER TO 動態修正 → START SLAVE。
生產環境紅線:未配置 auto_increment_increment/offset 絕不雙寫;未上 GTID/ROW 格式不上雙向。將維護操作腳本化、文檔化,納入變更管理流程。

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