MySQL 主從複寫是實現資料庫讀寫分離、異地備份、高可用架構的基石。本文記錄一套在 Windows Server 2003 + MySQL 4.1.20 環境驗證通過的完整部署流程,涵蓋帳號授權、配置調整、資料初始化、同步驗證與故障排查全生命週期。
| 角色 | OS | IP | MySQL 版本 | Server ID |
|---|---|---|---|---|
| Master (A) | Win 2003 | 192.168.100.1 | 4.1.20 | 1 |
| Slave (B) | Win 2003 | 192.168.100.2 | 4.1.20 | 2 |
-- 僅允許從庫 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');
權限說明: REPLICATION SLAVE 核心權限;RELOAD 支援 FLUSH TABLES;SUPER 允許 CHANGE MASTER TO。
FLUSH TABLES WITH READ LOCK;SHOW MASTER STATUS\G → 記下 File、Positionibdata1、.frm、.MYD、.MYI 等)UNLOCK TABLES;⚠️ **全程禁止雙方寫入**,確保基線一致。
[mysqld]
server-id = 1
log-bin = c:log-bin.log
# 可選:指定同步/忽略的庫(多庫重複寫行)
binlog-do-db = backup_db
binlog-ignore-db = mysql
重啟主庫,開始產生二進制日誌。
[mysqld]
server-id = 2
master-host = 192.168.100.1
master-user = backup
master-password = 1234
master-port = 3306
# 可選:只同步指定庫
replicate-do-db = backup_db
重啟從庫,自動連線主庫拉取 binlog 重放。
-- 從庫執行
SHOW SLAVE STATUS\G
關鍵指標均為 Yes 即成功:
Slave_IO_Running: Yes — IO 線程正常連線主庫、拉取 binlogSlave_SQL_Running: Yes — SQL 線程正常重放 relay log| 類別 | 指令 | 用途 |
|---|---|---|
| 主庫 | SHOW MASTER STATUS\G | 查看當前 binlog 檔案與位置 |
| SHOW SLAVE HOSTS | 查看連線的從庫清單 | |
| SHOW BINLOG EVENTS | 查看 binlog 事件細節 | |
| PURGE BINARY LOGS TO 'file' | 清理舊 binlog(謹慎) | |
| RESET MASTER | 重置 binlog 索引(慎用) | |
| SET SQL_LOG_BIN=0 | 當前會話不記錄 binlog | |
| 從庫 | START SLAVE | 啟動複寫(IO+SQL 線程) |
| STOP SLAVE | 停止複寫 | |
| START SLAVE IO_THREAD | 單獨啟動 IO 線程 | |
| START SLAVE SQL_THREAD | 單獨啟動 SQL 線程 | |
| RESET SLAVE | 重置從庫狀態(清 relay log、master.info) | |
| SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N | 跳過 N 個錯誤事件(緊急修復) | |
| CHANGE MASTER TO ... | 動態修改主庫連線資訊 | |
| SHOW SLAVE STATUS\G | 核心監控指令 |
telnet 192.168.100.1 3306SELECT User, Host FROM mysql.user WHERE User='backup'mysqld.log / hostname.errSHOW SLAVE STATUS\G 查看 Last_SQL_ErrorSTOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;(需確認業務影響)slave_parallel_workers)my.ini 編碼、換行符必須一致,否則參數不生效STOP SLAVE; RESET SLAVE; 會清理,否則舊配置覆蓋新配置auto_increment_increment/offset) 與雙寫衝突(業務層路由)MASTER_AUTO_POSITION=1 簡化故障轉移MySQL 主從複雜度不在配置,而在於**資料一致性基線建立**、**持續監控體系**、**故障快速定位與恢復預案**。建議將部署流程標準化為 Ansible Playbook / Shell 腳本,配合定期演練切換,才能在故障發生時從容應對。