MySQL 主從同步是資料庫架構中不可或缺的基礎組件,主要解決四大核心需求:資料分佈(將資料分散至不同節點)、負載均衡(讀寫分離分攤查詢壓力)、備份容災(從庫作為熱備份)以及高可用性(主庫故障時從庫快速接管)。掌握其運作原理與搭建細節,是 DBA 進階的必修課。
主從同步本質上是「二進制日誌傳輸與重放」的過程,核心流程包含三大關鍵角色:
具體交互步驟如下:

| 角色 | IP | OS | MySQL 版本 |
|---|---|---|---|
| Master | 10.1.1.75 | CentOS 5.5 64bit | 5.1.50 |
| Slave | 10.1.1.76 | CentOS 5.5 64bit | 5.1.50 |
關鍵提醒:雙方 server-id 必須唯一,否則會導致同步迴路或完全不同步;建議在配置文件 my.cnf 固化該參數。
# Master 建立同步專用賬號(生產環境請使用強密碼)
GRANT REPLICATION SLAVE, FILE ON *.* TO 'replication'@'10.1.1.%' IDENTIFIED BY 'StrongPass#2024';
FLUSH PRIVILEGES;
# Slave my.cnf 關鍵配置
server-id = 2
replicate-wild-ignore-table = mysql.%
log-slave-updates
# auto_increment_increment/offset 僅主主同步需啟用
# slave-skip-errors 請極謹慎使用,會導致資料不一致
為何推薦 replicate-wild-ignore-table? 它能正確處理跨庫更新(如 USE mysql; UPDATE test.t SET ...),且動態生效無需重啟,優於 replicate-do-db/ignore-db。
根據存儲引擎選擇導出策略:
mysqldump --lock-tables --events --triggers --routines --flush-logs --master-data=2 --databases dbname > db.sqlmysqldump --single-transaction --events --triggers --routines --flush-logs --master-data=2 --databases dbname > db.sql--master-data=2 會將 Binlog 位置以註釋形式寫入 SQL 檔,便於後續 CHANGE MASTER 使用。導入從庫:mysql -h 10.1.1.76 -u root -p dbname < db.sql。
# 從 db.sql 解析 Binlog 位置
grep -i "change master" db.sql
# 輸出示例:-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=106;
# Slave 執行
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='10.1.1.75', MASTER_USER='replication', MASTER_PASSWORD='StrongPass#2024',
MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=106;
START SLAVE;
# 驗證
SHOW SLAVE STATUS\G;
# 關鍵指標:Slave_IO_Running=Yes, Slave_SQL_Running=Yes, Seconds_Behind_Master=0
最佳實踐:CHANGE MASTER 參數勿寫入配置文件,避免重啟後配置衝突,運行時動態下發更靈活。
| 場景 | 命令 | 說明 |
|---|---|---|
| 停止同步 | STOP SLAVE [IO_THREAD|SQL_THREAD]; | 可單獨停止 IO 或 SQL 線程 |
| 啟動同步 | START SLAVE [IO_THREAD|SQL_THREAD]; | 對應啟動 |
| 重置同步 | RESET SLAVE; | 清除 relay-log、master.info,慎用! |
| 狀態檢查 | SHOW SLAVE STATUS\G; | 重點關注 IO/SQL 線程、延遲秒數、錯誤信息 |
| 跳過錯誤 | STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; | 需確認該事務資料已一致,否則會導致數據偏差 |
| 指定位置重同步 | CHANGE MASTER TO MASTER_LOG_FILE='...', MASTER_LOG_POS=...; START SLAVE; | 適用於跳過特定錯誤事件 |
SQL_SLAVE_SKIP_COUNTER 必須先記錄錯誤、核對核心業務資料一致性後再執行。percona-toolkit 的 pt-table-checksum(檢測)、pt-table-sync(修復)、pt-heartbeat(監控延遲),納入例行巡檢。replicate-wild-ignore-table:避免 replicate-do/ignore-db 的跨庫同步缺陷。MySQL 主從同步雖然架構成熟,但細節決定成敗。從 server-id 唯一性、同步賬號最小權限、快照導出參數選擇、到日常巡檢工具鏈建設,每一環疏忽都可能引發資料不一致或同步中斷。建議將上述「五大鐵律」固化為團隊運維規範,並定期演練故障切換與資料校驗流程,才能真正發揮高可用架構的價值。