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

MySQL 主從複製架構詳解:原理、搭建步驟與多種拓撲實戰

     編輯:MySQL 綜合教學

MySQL 主從複製架構詳解:原理、搭建步驟與多種拓撲實戰

什麼是 MySQL 複製?

MySQL 複製(Replication)是指從伺服器從主伺服器複製二進位日誌,並重新執行其中的事件,以達成資料同步。類似 Oracle Data Guard,但架構更輕量。主要優勢:

  • 即時備份: 解決單點故障導致資料不一致。
  • 讀寫分離: 將讀請求分流至從庫,降低主庫壓力(不適合超大數據量,大數據建議用叢集)。

複製核心流程(三步曲)

  1. 主庫記錄 Binlog: 事務提交前,主庫將資料變更序列化寫入二進位日誌,形成 Binlog Events。
  2. 從庫拉取 Relay Log: 從庫的 I/O 執行緒連接主庫,請求 Binlog 並寫入本地中繼日誌。
  3. 從庫重放 SQL: 從庫的 SQL 執行緒讀取 Relay Log 並依序重放,將變更應用到自身資料。

MySQL 複製流程圖

關鍵特性: 複製是非同步且串行化的——主庫上的並行更新在從庫上會串行執行,可能導致延遲。

實戰搭建:一主一從

環境規劃

  • Master: 192.168.1.5
  • Slave: 192.168.1.6
  • OS: Oracle Linux 6.1
  • MySQL: 5.5.37

Master 配置

  1. 建立複製帳號(主從均需執行):
    建立複製帳號
  2. 清空二進位日誌(可選):
    清空日誌
    若不清空,需記錄當前 MASTER_LOG_FILE 與 MASTER_LOG_POS,後續 CHANGE MASTER TO 時指定。

Slave 配置

  1. 修改 server-id 並重啟:
    修改 server-id
  2. 清空日誌(同 Master)。
  3. 啟用複製連線:
    CHANGE MASTER TO
    若 Master 日誌未清空,需指定實際的 MASTER_LOG_FILE 與 MASTER_LOG_POS。
  4. 限定同步資料庫(三種方式):
    • Master 端 my.cnf 設定 binlog-do-db、binlog-ignore-db
    • 授權時限定資料庫
    • Slave 端設定 replicate-do-db=dbname
  5. 啟動 Slave 並驗證:
    START SLAVE
    SHOW SLAVE STATUS
    成功標準: Slave_IO_Running = Yes 且 Slave_SQL_Running = Yes。

驗證測試

在 Master 建庫、建表、插入資料,觀察 Slave 是否同步:

  • Master 建庫 → Slave 查看同步
  • Master 建表插入資料 → Slave 驗證

備份與遷移補充:mysqldump 保留位點資訊

主從環境下備份時,務必加上 --master-data=2 參數:

mysqldump --master-data

這樣備份檔會包含 Binlog 檔名與位點,新 Slave 還原後直接 START SLAVE 即可快速完成增量同步。

常見複製拓撲架構

1. 主主複製

雙向同步,避免單點故障。最大風險: 資料衝突(如雙邊同時更新同一行)。配置方式同主從,雙向設定 CHANGE MASTER TO,注意對應 MASTER_LOG_FILE/POS。

2. 一主多從

適合「寫少讀多」場景,讀請求分散到多個從庫。但從庫過多會增加主庫 I/O 執行緒與網路頻寬壓力,導致延遲。

3. 多級聯複製

解決一主多從的壓力瓶頸:中間層 Slave 開啟 log_slave_updates = 1 並啟用 Binlog,充當下一層的 Master。

多級聯複製

權衡: 層級越深,延遲風險越大。條件允許時,傾向拆分為多個獨立 Replication 叢集。


版權聲明:本文整理自 bestvivi(https://bestvivi.com/2015/09/06/MySQL%E5%A4%8D%E5%88%B6%E4%BB%8B%E7%B4%B9%E5%8F%8A%E6%90%AD%E5%BB%BA/),感謝原作者創作。

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