首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 主從複制配置完整教學:從零建立高可用架構

     編輯:MySQL 資料庫相關知識

MySQL 主從複制採用非同步單向複制,主庫寫入 Binlog,從庫透過 I/O 執行緒拉取、SQL 執行緒重放,實現資料同步。本文提供生產級配置完整步驟。

架構原理

  • 主庫:Binlog Dump 執行緒 → 發送 Binlog 事件
  • 從庫:I/O 執行緒 → 接收寫入 Relay Log → SQL 執行緒 → 重放事件
  • 狀態檔:master.info(Binlog 位置)、relay-log.info(Relay Log 位置)

前置條件

  • 主從版本一致(建議同主版本)
  • 主庫啟用 log-bin、設定 server-id
  • 從庫設定唯一 server-id
  • 網路互通(防火牆開放 3306)

配置步驟

1. 主庫建立複制帳號

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'repl_password';
FLUSH PRIVILEGES;

2. 主庫鎖表、備份、記錄 Binlog 位置

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
-- 記錄 File (如 mysql-bin.000003) 和 Position (如 73)
-- 此處保持會話不斷開,另開終端打包資料目錄
tar -czf /tmp/mysql-snapshot.tar.gz /var/lib/mysql
UNLOCK TABLES;

3. 傳輸並還原快照到從庫

scp /tmp/mysql-snapshot.tar.gz slave_host:/tmp/
# 從庫上
tar -xzf /tmp/mysql-snapshot.tar.gz -C /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql

4. 從庫配置 my.cnf

[mysqld]
server-id = 2
relay-log = mysql-relay-bin
log-slave-updates = 1
read-only = 1

5. 從庫設定複制起點並啟動

CHANGE MASTER TO
    MASTER_HOST = 'master_ip',
    MASTER_USER = 'repl_user',
    MASTER_PASSWORD = 'repl_password',
    MASTER_LOG_FILE = 'mysql-bin.000003',
    MASTER_LOG_POS = 73;

START SLAVE;

6. 驗證複制狀態

SHOW SLAVE STATUS\G
-- 關鍵指標:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Seconds_Behind_Master: 0
-- Last_IO_Error / Last_SQL_Error: 空

常見問題排查

現象可能原因處理
IO_Running: No網路不通、帳號密碼錯、Binlog 位置錯檢查防火牆、重設 CHANGE MASTER TO
SQL_Running: No資料衝突、Schema 不同、外鍵失敗查 Last_SQL_Error,跳過錯誤或重建從庫
Seconds_Behind_Master 偏大從庫效能不足、大事務、網路延遲優化從庫、啟用並行複制 (slave_parallel_workers)

進階配置建議

  • GTID 複制 (MySQL 5.6+):gtid_mode=ON,自動定位位置,故障切換更簡單
  • 半同步複制:rpl_semi_sync_master=ON,主庫至少一從庫確認才提交,降低資料遺失風險
  • 並行複制:slave_parallel_workers=4,多執行緒重放 Relay Log
  • 延遲從庫:CHANGE MASTER TO MASTER_DELAY=3600,防誤刪資料 1 小時內可恢復
  • 監控告警:Seconds_Behind_Master > 300、Slave_*_Running != Yes 觸發告警
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved