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

高性能 MySQL 進化論 (十四):主從複制 (Replication) 架構、配置與運維實戰

     編輯:MySQL 綜合教學

複制核心價值

  • 數據分發:多從庫分擔讀壓力 (讀寫分離)。
  • 負載均衡:不同業務連不同從庫。
  • 備份窗口:從庫停庫備份不影響主庫。
  • 高可用/故障切換:主庫掛掉提升從庫為主 (MHA/Orchestrator/GTID)。

三種複制模式

模式原理優點缺點
Statement-Based (SBR)記錄 SQL 語句Binlog 小、易讀、跨版本兼容非確定性函數導致主從不一致;需行鎖
Row-Based (RBR)記錄行變更前後像最安全、支援複制過濾、並行複制效率高Binlog 大、無法直接看到 SQL
Mixed預設 SBR,遇不安全切 RBR折中行為難預測

生產強烈建議:binlog_format = ROW。

複制三階段流程

  1. 主庫:事務提交前寫 Binlog (Group Commit) → 釋放鎖 → 存儲引擎提交。
  2. 從庫 I/O 線程:連主庫 → 請求 Binlog (GTID 或 File+Pos) → 寫 Relay Log。
  3. 從庫 SQL 線程:讀 Relay Log → 重放事務 → 更新數據。

關鍵限制:從庫重放單線程串行 (5.6 前);5.7+ slave_parallel_workers + LOGICAL_CLOCK 並行。

配置實戰 (主/從)

主庫 my.cnf

[mysqld]
server_id = 100
log_bin = mysql-bin
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
expire_logs_days = 7
max_binlog_size = 100M
sync_binlog = 1          # 最安全,效能敏感可設 100-1000
binlog_row_image = FULL  # 或 MINIMAL 省空間

從庫 my.cnf

[mysqld]
server_id = 200
relay_log = mysql-relay-bin
log_slave_updates = 1      # 從庫做其他從庫的主必開
read_only = 1              # 防誤寫入
slave_parallel_workers = 8
slave_parallel_type = LOGICAL_CLOCK
master_info_repository = TABLE
relay_log_info_repository = TABLE
gtid_mode = ON
enforce_gtid_consistency = ON

建立複制帳號 (主庫)

CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongReplPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

數據同步啟動 (三種方式)

方式一:冷備份 (停主庫) - 簡單但停服

systemctl stop mysqld
rsync -av /var/lib/mysql/ slave:/var/lib/mysql/
systemctl start mysqld

方式二:熱備份 xtrabackup (推薦、不停服)

# 主庫
xtrabackup --backup --target-dir=/backup/full --user=root --password
xtrabackup --prepare --target-dir=/backup/full
rsync -av /backup/full/ slave:/var/lib/mysql/

# 從庫啟動後自動從 xtrabackup_binlog_info 獲取位置

方式三:mysqldump (小數據量)

mysqldump -uroot -p --single-transaction --master-data=2 --all-databases | \
  mysql -h slave_ip -uroot -p

啟動複制 (GTID 模式最簡單)

-- 從庫執行
CHANGE MASTER TO
    MASTER_HOST='master_ip',
    MASTER_USER='repl',
    MASTER_PASSWORD='StrongReplPass123!',
    MASTER_AUTO_POSITION=1;  -- GTID 自動定位

START SLAVE;
SHOW SLAVE STATUS\G
-- 確認 Slave_IO_Running=Yes, Slave_SQL_Running=Yes, Seconds_Behind_Master=0

監控與運維關鍵指標

指標健康閾值異常處理
Seconds_Behind_Master< 1-5 秒大事務、DDL、並行度不足、I/O 瓶頸
Slave_IO_Running / Slave_SQL_RunningYes / YesNo → 查 Last_IO_Error / Last_SQL_Error
Relay_Log_Space穩定持續增長 → SQL 線程追不上
Exec_Master_Log_Pos vs Read_Master_Log_Pos接近差距大 → 積壓

常見故障與應對

  • 主從不一致:定期 pt-table-checksum 校驗 → pt-table-sync 修復;啟用 binlog_format=ROW 杜絕語句級不一致。
  • 大事務阻塞從庫:主庫拆分大事務;從庫並行複制 + slave_pending_jobs_size_max 控制隊列。
  • Binlog 丟失/損壞:sync_binlog=1、雲盤/RAID、定期備份 Binlog 異地。
  • GTID 空洞/跳過錯誤:SET GTID_NEXT='aaa-bbb-ccc:5'; BEGIN; COMMIT; SET GTID_NEXT=AUTOMATIC; 填補/跳過。

高可用架構演進

  1. MHA (Master High Availability):Perl 腳本,故障檢測、自動切換、Binlog 補償。
  2. Orchestrator:Go 重寫,Web UI、拓撲視覺化、遷移/切換一鍵操作、支援 GTID。
  3. InnoDB Cluster / Group Replication:官方原生多主同步複制 (Paxos)、自動故障切換、MySQL Router 讀寫分離。

總結

「ROW 格式 + GTID + 並行複制 + 監控校驗 + 自動化切換」 是現代 MySQL 高可用複制的標準配置。

掌握複制原理、配置最佳實踐、故障處理流程,構建可靠、可擴展、可運維的 MySQL 複制集群。

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