| 角色 | OS | IP | MySQL 版本 | datadir |
|---|---|---|---|---|
| Master (A) | Windows Server 2003 | 192.168.100.1 | 4.1.20 | C:\MySQL\data |
| Slave (B) | Windows Server 2003 | 192.168.100.2 | 4.1.20 | C:\MySQL\data |
現代提示: Windows Server 2003 / MySQL 4.1 已停止支援,**生產請升級至 Windows Server 2019/2022 + MySQL 8.0**。本文保留原版邏輯供教學參考,關鍵差異處標註現代做法。
-- 登入 Master MySQL
mysql -u root -p
-- 建立帳號,限制來源 IP
GRANT REPLICATION SLAVE, RELOAD, SUPER ON *.*
TO 'backup'@'192.168.100.2' IDENTIFIED BY '1234';
FLUSH PRIVILEGES;
-- ⚠ MySQL 4.1 密碼雜湊相容性
SET PASSWORD FOR 'backup'@'192.168.100.2' = OLD_PASSWORD('1234');
-- 現代 8.0:CREATE USER ... IDENTIFIED WITH caching_sha2_password BY '...';
FLUSH TABLES WITH READ LOCK;(保持視窗不關閉)C:\MySQL\data 整個目錄至 Slave 同路徑UNLOCK TABLES;現代做法: 使用 mysqldump --single-transaction --master-data=2 熱備份,無需鎖表停寫。
[mysqld]
server-id=1
log-bin=c:\mysql-bin.log
# 現代建議:
# binlog_format=ROW
# gtid_mode=ON
# enforce_gtid_consistency=ON
# expire_logs_days=7
重啟 MySQL 服務:net stop mysql & net start mysql
[mysqld]
server-id=2
master-host=192.168.100.1
master-user=backup
master-password=1234
master-port=3306
master-connect-retry=60
# 可選:僅同步指定庫
replicate-do-db=backup
# 現代 8.0 棄用 master-host 等參數,改用 CHANGE MASTER TO
C:\MySQL\data\hostname.errSHOW SLAVE STATUS\G成功標誌:
Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 0
-- Master 執行
USE testdb;
CREATE TABLE t_sync (id INT PRIMARY KEY AUTO_INCREMENT, val VARCHAR(20), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
INSERT INTO t_sync (val) VALUES ('test_from_master');
-- Slave 查詢(應立即可見)
SELECT * FROM testdb.t_sync;
舊版將複寫配置持久化於 data/master.info。**修改複寫參數前必須刪除此檔並重啟**,否則新配置不生效。現代 8.0 存儲於系統表 mysql.slave_master_info,透過 CHANGE MASTER TO 管理。
| 現象 | 可能原因 | 排查步驟 |
|---|---|---|
| IO_Running: No | 網路不通/帳號密碼錯/防火牆 | Slave 端 telnet 192.168.100.1 3306、檢查錯誤日誌 Last_IO_Error |
| SQL_Running: No | 資料衝突/結構不一致/大事務 | 檢查 Last_SQL_Error、對比表結構 SHOW CREATE TABLE |
| Seconds_Behind_Master 增長 | 從庫效能不足/長查詢阻塞 | SHOW PROCESSLIST 找阻塞、升級硬體、優化索引 |
CHANGE MASTER TO ... MASTER_AUTO_POSITION=1 替代 my.ini 靜態配置read_only=ON + super_read_only=ONWindows 下 MySQL 複寫邏輯與 Linux 一致,**核心在於:server-id 唯一、Binlog 格式一致、網路互通、初始資料一致、GTID 自動定位**。舊版 my.ini 靜態配置已淘汰,請全面轉向動態 CHANGE MASTER TO 管理。