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

Windows MySQL 主從單向同步配置指南:從備份到 binlog-do-db 陷阱全解析

     編輯:MySQL 資料庫相關知識

環境基線

角色OSMySQLIP
Master (A)Win 20034.1.20192.168.100.1
Slave (B)Win 20034.1.20192.168.100.2

標準配置流程

1. Master 創建同步賬號

GRANT REPLICATION SLAVE, RELOAD, SUPER ON *.* 
TO 'backup'@'192.168.100.2' IDENTIFIED BY '1234';

-- 兼容舊密碼插件 (MySQL 4.1+)
SET PASSWORD FOR 'backup'@'192.168.100.2' = OLD_PASSWORD('1234');

2. 靜默同步初始數據

  1. 停止 Master 服務
  2. 拷貝數據目錄到 Slave(確保完全一致)
  3. 全程禁止雙端寫入

3. Master 配置 (my.ini)

[mysqld]
server-id = 10
log-bin = c:\log-bin.log

重啟 Master,開始記錄 Binlog。

4. Slave 配置 (my.ini)

[mysqld]
server-id = 11
master-host = 192.168.100.1
master-user = backup
master-password = 1234
replicate-do-db = backup  # 只同步指定庫

重啟 Slave,自動連接同步。

5. 驗證同步

-- Master
SHOW MASTER STATUS;

-- Slave
SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

深度解析:binlog-do-db vs replicate-do-db 陷阱

官方推薦

Master 不設置 binlog-do-db,Slave 用 replicate-do-db 過濾

binlog-do-db 行為詳解(基於「當前默認庫」)

場景SQL 示例是否記入 Binlog原因
當前庫匹配USE db1; INSERT INTO db1.t VALUES(1);✅ 是當前庫 = binlog-do-db
跨庫操作USE db1; INSERT INTO db2.t VALUES(1);❌ 否當前庫 db1 ≠ db2,即使操作目標庫在列表中
DDL 特例USE db1; CREATE DATABASE db2;❌ 否CREATE/ALTER/DROP DATABASE 不受 binlog-do-db 控制

replicate-do-db 行為(同邏輯,基於「當前默認庫」)

同樣受「當前庫」限制,跨庫操作可能不同步。

最佳實踐:表級通配符過濾

-- Master (可選,不推薦用 binlog-do-db)
-- binlog-do-db = business_db

-- Slave (推薦)
replicate-wild-do-table = business_db.%
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = test.%

優勢:基於表名匹配,不受「當前庫」上下文影響,跨庫操作也能正確過濾。

位點不匹配時的修復 (CHANGE MASTER TO)

場景

Master SHOW MASTER STATUS 顯示 File=updatelog.000012, Pos=15016
Slave 當前位點不同,導致同步卡住/報錯。

修復命令

STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.0.1',
MASTER_USER='test',
MASTER_PASSWORD='******',
MASTER_LOG_FILE='updatelog.000012',
MASTER_LOG_POS=15016;
START SLAVE;

完整參數示例

CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='jb51',
MASTER_PASSWORD='www.jb51.net',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=76146;

server-id 衝突排查

錯誤:The slave I/O thread stops because master and slave have equal MySQL server ids

檢查:SHOW VARIABLES LIKE 'server_id';

建議:不要用 1/2 這類小數值,建議用 10, 11, 100, 200 等有業務含義的數值,避免默認值衝突。

總結

Windows MySQL 主從同步核心要點:
1. server-id 唯一且避開默認值
2. 初始數據靜默拷貝,全程凍結寫入
3. 過濾用 replicate-wild-do-table,不用 binlog-do-db
4. 位點不對用 CHANGE MASTER TO 精準定位
5. 驗證雙 Yes (IO/SQL) 才算成功

將此流程固化為部署清單,新環境 30 分鐘內可完成驗證上線。

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