MySQL 原生複製 (Replication) 基於 Binlog 異步傳輸,是構建高可用、讀寫分離、異地災備的基石。本文覆蓋 **版本相容性原則、主庫配置、從庫建立、同步驗證、日志清理、故障切換** 全生命週期,給出生產級配置模板與運維 SOP。
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'StrongPass#2024'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES;
[mysqld] server-id = 2 # 唯一,≠ 主庫 relay_log = relay-bin # Relay Log 前綴 read_only = ON # 從庫預設唯讀 super_read_only = ON # 限制 SUPER 用戶寫入 (5.7.8+) relay_log_recovery = ON # 啟動自動修復 Relay Log (5.6+) skip_slave_start = ON # 啟動不自動啟動複製,手動控制 # 並行複製 (5.6+ 效能關鍵) slave_parallel_workers = 8 # SQL 線程並行數 slave_parallel_type = LOGICAL_CLOCK # 基於組提交並行 (5.7+) master_info_repository = TABLE # 主庫信息存表 (抗崩潰) relay_log_info_repository = TABLE
-- 主庫: 鎖表獲取最新坐標 FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; -- 記錄 File, Position UNLOCK TABLES; -- 從庫: 停止 SQL 線程 STOP SLAVE SQL_THREAD; -- 等待 IO 線程追上 (Relay_Log_Space 穩定) -- 更新同步坐標 (GTID 模式無需此步) CHANGE MASTER TO MASTER_LOG_FILE='新文件', MASTER_LOG_POS=新位置; -- 重新啟動 START SLAVE SQL_THREAD;
| 架構層級 | 組件 | 切換方式 | RTO/RPO |
|---|---|---|---|
| 基礎主從 | 手動 | 人工提升從庫、修改應用配置 | 分~時 / 秒級 |
| MHA (Master High Availability) | 腳本自動化 | 監控主庫心跳 → 自動選主 → VIP 漂移 → 應用重連 | 秒級 / 秒級 |
| MGR (MySQL Group Replication) / InnoDB Cluster | 原生 Paxos 協議 | 多主/單主自動選舉、一致性保證 | 亞秒級 / 零丟失 |
| ProxySQL + Orchestrator | 中間層路由 + 拓撲管理 | 流量無感切換、拓撲可視化 | 毫秒級 / 秒級 |
Slave_IO_Running / Slave_SQL_Running = Yes (雙 Yes 才健康)。Seconds_Behind_Master < 300 (業務容忍度)。Relay_Log_Space 增長趨勢 (IO 線程阻塞預警)。Last_IO_Error / Last_SQL_Error 非空即告警。GTID_SUBTRACT(Executed, Retrieved) 非空表示從庫落後事務。character_set_server、collation_server 必須一致,否則亂碼/截斷。binlog_format=ROW 可複製臨時表,STATEMENT 模式會報錯。SET GLOBAL sql_slave_skip_counter=1 僅作臨時應急,**必須事後補數據、根因修復**,否則數據永久不一致。MySQL 主從雙機熱備核心在於 **「GTID + ROW + 並行複製 + 監控自動化」** 四大支柱。配置階段嚴守版本相容、server-id 唯一、雙 1 刷盤、備份坐標精準記錄;運維階段建立「雙 Yes 監控、延遲告警、日志清理 SOP、切換演練」常態化機制。演進至 MGR/InnoDB Cluster 實現原生強一致高可用,是生產架構終局。