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

MySQL 官方參考手冊第 18 章:複制——中文完整目錄與核心內容摘錄

     編輯:MySQL 綜合教學

MySQL 5.7 官方手冊第 18 章 複制——中文導讀與核心知識點

本文整理自官方英文手冊,保留完整章節結構,提煉核心概念與配置要點。

18.1 複制配置

18.1.1 基於 Binlog 的傳統複制配置

  • Master:開啟 log-bin、設定唯一 server-id。
  • 建立複制專用用戶:GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'pwd';
  • Master 鎖表獲取 Binlog 座標:FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
  • 資料快照:mysqldump --master-data 或物理拷貝(InnoDB 可不鎖表)。
  • Slave:設 server-id、CHANGE MASTER TO ... MASTER_LOG_FILE=..., MASTER_LOG_POS=...; → START SLAVE;

18.1.3 GTID 複制(5.6+ 推薦)

  • GTID = source_id:transaction_id(如 3E11FA47-71CA-11E1-9E33-C80AA9429562:23),全域唯一標識事務。
  • 優勢:無需手動管理 Binlog 位點,自動定位、故障切換簡單、多源複制原生支援。
  • 啟用:gtid_mode=ON、enforce_gtid_consistency=ON、CHANGE MASTER TO MASTER_AUTO_POSITION=1;
  • 限制:不支援非事務表(MyISAM)混合寫入、CREATE TABLE ... SELECT、臨時表、sql_slave_skip_counter。

18.1.4 多源複制

  • 單 Slave 從多個 Master 接收事務,每個 Master 對應一個 Channel。
  • 需啟用 master_info_repository=TABLE、relay_log_info_repository=TABLE。
  • 管理:CHANGE MASTER TO ... FOR CHANNEL 'master-1'; START SLAVE FOR CHANNEL 'master-1';

18.1.5 在線切換複制模式(匿名事務 ↔ GTID)

  • gtid_mode 可動態調整:OFF → OFF_PERMISSIVE → ON_PERMISSIVE → ON(嚴格順序,每步需全集群同步完成)。
  • 線上開啟 GTID 9 步驟:ENFORCE_GTID_CONSISTENCY=WARN → ON → GTID_MODE=OFF_PERMISSIVE → ON_PERMISSIVE → 等待匿名事務清零 → ON。

18.2 複制實現細節

18.2.1 三種複制格式

格式優點缺點
Statement (SBR)Binlog 小、審計友好、歷史久非確定性函數/UDF/存儲過程不安全、鎖爭用大
Row (RBR)完全安全、行鎖少Binlog 大、無法直接閱讀 SQL、MyISAM 表鎖重
Mixed兼顧性能與安全(預設推薦)複雜度略高

18.2.2 三執行緒架構

  • Master:Binlog Dump Thread**(每 Slave 一個)
  • Slave:I/O Thread**(拉取 Binlog 寫 Relay Log)+ **SQL Thread**(重放 Relay Log)

18.2.4 Relay Log 與狀態檔

  • Relay Log:Slave 本地暫存的 Binlog 副本,格式同 Binlog。
  • master.info / relay-log.info:記錄複制座標,可存檔案或系統表(mysql.slave_master_info、mysql.slave_relay_log_info),建議用表(Crash-safe)。

18.3 複制解決方案

  • 備份分流: Slave 掛載 read_only、FLUSH TABLES WITH READ LOCK 做冷/熱備份,不影響 Master。
  • 異構引擎: Master InnoDB、Slave MyISAM/Archive 等,default_storage_engine 不複制,需手動 ALTER TABLE。
  • 水平擴展: 讀寫分離(寫 Master、讀 Slaves),適用讀多寫少。
  • 級聯複制: Master → Slave1(開 log-slave-updates) → Slaves,減輕 Master 網路/CPU 壓力。
  • 故障切換: GTID + mysqlfailover 自動化;傳統複制需腳本監控 + CHANGE MASTER TO 手動切換。
  • 半同步複制: Master 提交前等待至少 1 個半同步 Slave 確認收到 Relay Log,rpl_semi_sync_master_enabled=1,平衡一致性與效能。
  • 延遲複制: CHANGE MASTER TO MASTER_DELAY=N;,防誤操作、歷史審計。

18.4 避坑提示

  • 非確定性函數(UUID()、NOW() 等)在 SBR 下導致主從不一致 → 用 Mixed/RBR。
  • replicate-do-db / replicate-ignore-db 與 USE db 配合易觸發 Bug(#77684)→ 推薦用表級 replicate-do-table。
  • 大事務/長查詢導致 Slave 延遲 → 調大 slave_parallel_workers (5.7+)、優化索引、拆分大事務。
  • Binlog 格式變更需重啟,規劃維護窗口。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved