首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主從復制(Master-Slave)全流程實戰:從授權、Binlog 到同步驗證與故障處理

     編輯:MySQL 綜合教學

主從復制是 MySQL 高可用、讀寫分離、備份卸載的基石。本文以雙節點(Master 192.168.10.1 / Slave 192.168.10.2)為例,完整演示授權、Binlog 啟用、數據基線同步、從庫配置、狀態驗證及常見錯誤修復全流程。

一、架構優勢速覽

  • 故障切換:Master 掛掉可秒級提升 Slave 為新主。
  • 讀寫分離:SELECT 導流至 Slave,降低 Master 壓力(僅適用低實時性業務)。
  • 備份卸載:在 Slave 執行 mysqldump/xtrabackup,不影響主庫服務。

二、Master 端:用戶授權與 Binlog 啟用

1. 創建復制專用帳號

-- 僅授予 REPLICATION SLAVE 權限,最小化風險
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.10.%' IDENTIFIED BY 'repl_pass';
FLUSH PRIVILEGES;

2. 開啟 Binlog 並設定 Server ID

# /etc/my.cnf [mysqld] 區段
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW          -- 推薦 ROW 格式,避免非確定性函數導致不一致
expire_logs_days = 7         -- 自動清理 7 天前舊日誌
max_binlog_size = 500M

重啟後驗證:

SHOW VARIABLES LIKE 'log_bin';        -- ON
SHOW MASTER STATUS;                   -- 記錄 File/Position,後續同步基線

三、建立數據基線:Master 全量導出 → Slave 全量導入

# Master:刷新日誌並鎖表導出(-F 產生新 binlog,-l 鎖表)
mysqldump -uroot -p -F -l --all-databases > /tmp/full.sql
scp /tmp/full.sql 192.168.10.2:/tmp/

# Slave:清空舊數據並導入
mysql -uroot -p -e "RESET MASTER;"
mysql -uroot -p < /tmp/full.sql

四、Slave 端:配置並啟動復制線程

# /etc/my.cnf [mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin
log-slave-updates = 1          -- 若 Slave 還做他庫的 Master
read-only = 1                  -- 防止誤寫入

登錄 Slave 實例執行:

CHANGE MASTER TO
  MASTER_HOST='192.168.10.1',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='repl_pass',
  MASTER_LOG_FILE='mysql-bin.000002',   -- 取自 Master SHOW MASTER STATUS
  MASTER_LOG_POS=107;
START SLAVE;

五、驗證同步狀態

SHOW SLAVE STATUS\G
# 關鍵指標均為 Yes 即正常
Slave_IO_Running: Yes      -- IO 線程正常拉取 Binlog
Slave_SQL_Running: Yes     -- SQL 線程正常重放
Seconds_Behind_Master: 0   -- 延遲 0 秒

六、常見故障與修復

現象原因修復方案
Slave_SQL_Running=No從庫誤寫入/事務回滾導致數據衝突方案一:STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; 跳過 1 事務
方案二:重新指定 Master Log File/Position 同步
Seconds_Behind_Master=NULLIO 線程異常/網絡中斷檢查網絡、防火牆、Master 是否正常;SHOW SLAVE STATUS 看 Last_IO_Error
Duplicate entry 錯誤主鍵衝突同方案一跳過,或修正數據後重啟

七、運維小貼士

  • 定期對比 pt-table-checksum 校驗主從一致性。
  • 監控 Seconds_Behind_Master 告警閾值(如 > 300s 觸發)。
  • 生產環境建議部署 MHA/Orchestrator 實現自動故障轉移。

掌握上述全流程,即可在生產環境穩健落地 MySQL 主從架構,為高可用與讀寫分離奠定堅實基礎。

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