| 角色 | OS | MySQL | IP |
|---|---|---|---|
| Master (A) | Win 2003 | 4.1.20 | 192.168.100.1 |
| Slave (B) | Win 2003 | 4.1.20 | 192.168.100.2 |
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');
[mysqld]
server-id = 10
log-bin = c:\log-bin.log
重啟 Master,開始記錄 Binlog。
[mysqld]
server-id = 11
master-host = 192.168.100.1
master-user = backup
master-password = 1234
replicate-do-db = backup # 只同步指定庫
重啟 Slave,自動連接同步。
-- Master
SHOW MASTER STATUS;
-- Slave
SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Master 不設置 binlog-do-db,Slave 用 replicate-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 控制 |
同樣受「當前庫」限制,跨庫操作可能不同步。
-- 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.%
優勢:基於表名匹配,不受「當前庫」上下文影響,跨庫操作也能正確過濾。
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;
錯誤: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 分鐘內可完成驗證上線。