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

MySQL 高可用架構:多級復制(鏈式復制)實戰部署指南

     編輯:MySQL 綜合教學

MySQL 高可用架構:多級復制(鏈式復制)實戰部署指南

架構優勢

傳統一主多從下,主庫故障需手動提升從庫。多級復制(A→B→C) 讓故障轉移變得極簡:

  • 正常:Master(A) → Slave(B) → Slave(C)
  • A 故障:停 B 的 SLAVE,B 升主,C 指向 B → Master(B) → Slave(C) → Slave(A恢復後)
  • B 故障:C 升主,A 指向 C,B 恢復後掛 C 下 → Master(C) → Slave(A) → Slave(B)

核心依賴:所有節點版本一致、開啟 log_slave_updates(從庫將 Relay Log 寫入自身 Binlog,傳遞給下游)。

部署環境

角色IP主機名版本
Master192.168.2.241db15.6.29
Slave1192.168.2.242db25.6.29
Slave2192.168.2.243db35.6.29

步驟 1:建立復制賬號(所有節點執行)

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.2.%' IDENTIFIED BY 'repl';
FLUSH PRIVILEGES;

步驟 2:配置 my.cnf 關鍵參數(所有節點)

[mysqld]
log-bin = mysql-bin
server-id = 241   # 242, 243 分別對應,建議用 IP 末段
log_slave_updates = 1   # 關鍵!從庫轉發 Binlog
expire_logs_days = 7
binlog_format = ROW      # 推薦 ROW 格式

修改後 systemctl restart mysqld。

步驟 3:主庫備份並導入從庫

# 在 db1 (Master) 執行
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;  -- 記下 File & Position,如 mysql-bin.000002, 409
# 另開終端導出
mysqldump -uroot -p --all-databases --add-drop-table > all_db.sql
# 解鎖
UNLOCK TABLES;

# 將 all_db.sql 複製到 db2、db3 導入
mysql -uroot -p < all_db.sql

步驟 4:建立復制關係

在 db2(第一級從庫)上:

CHANGE MASTER TO 
  MASTER_HOST='192.168.2.241',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl',
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=409;
START SLAVE;
SHOW MASTER STATUS;  -- 記下 db2 的 Binlog 位置,供 db3 使用

在 db3(第二級從庫)上:

CHANGE MASTER TO 
  MASTER_HOST='192.168.2.242',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl',
  MASTER_LOG_FILE='mysql-bin.000002',  -- db2 的 File
  MASTER_LOG_POS=647569;               -- db2 的 Position
START SLAVE;

步驟 5:驗證復制狀態

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

故障切換演練

  1. db1 故障:在 db2 執行 STOP SLAVE; → db2 成為新主。db1 恢復後,CHANGE MASTER TO db3 掛在 db3 下。
  2. 防誤寫:從庫 my.cnf 加 read_only = 1(超級用戶除外)。
  3. 跳過錯誤:遇 1062 主鍵衝突,可 STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;(謹慎使用,先排查原因)。

監控建議

  • 監控 Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running。
  • Binlog 增長速率、磁盤空間預警。
  • 定期 pt-table-checksum 校驗主從數據一致性。

多級復制以極低成本實現故障秒級切換,是中小規模核心業務的高可用首選方案。

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