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

MySQL 複制原理與拓撲實戰:從主從同步到雙主高可用架構

     編輯:MySQL 綜合教學

核心原理:三階段異步複製

  1. Master:事務提交前將變更順序寫入 Binary Log
  2. Slave I/O 線程:連接 Master,拉取 Binlog Events 寫入本地 Relay Log
  3. Slave SQL 線程:重放 Relay Log,回放數據變更

關鍵限制:Slave 回放是單線程串行的(5.6 前),Master 並行寫入在 Slave 端順序執行,易成瓶頸。

搭建標準主從

1. 創建複製賬號


GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*
TO 'repl'@'192.168.0.%' IDENTIFIED BY 'pass';

2. Master 配置


[mysqld]
log-bin=mysql-bin
server-id=10

3. Slave 配置


[mysqld]
server-id=2
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1

4. 建立同步鏈路


CHANGE MASTER TO
  MASTER_HOST='master_ip',
  MASTER_USER='repl',
  MASTER_PASSWORD='pass',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=4;
START SLAVE;
SHOW SLAVE STATUS\G

關鍵指標:Slave_IO_Running: Yes、Slave_SQL_Running: Yes、Seconds_Behind_Master: 0。

從現有 Master 初始化 Slave

方案 A:mysqldump 熱備份(推薦)


# Master
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;  -- 記錄 File & Position
mysqldump --all-databases --lock-all-tables > dump.sql
UNLOCK TABLES;

# Slave
mysql < dump.sql
CHANGE MASTER TO MASTER_LOG_FILE='...', MASTER_LOG_POS=...;
START SLAVE;

方案 B:冷備份(停 Master)

停服務 → 複製數據目錄 → 啟動 Master → Slave 掛載數據 → 配置同步點。

複製模式演進

模式Binlog 格式優點缺點
Statement (SBR)SQL 語句日誌小、易閱讀、壓縮好非確定性函數(NOW、UUID)導致不一致
Row (RBR)行級變更絕對一致、無函數問題日誌大、不可讀、大批量更新開銷大
Mixed自動切換兼顧兩者需 5.1+,動態 SET binlog_format=ROW

關鍵文件解析

  • mysql-bin.index:Binlog 文件索引
  • master.info:Slave 記錄 Master 連接信息、讀取位點(勿刪除)
  • relay-log.info:SQL 線程回放位點

常見拓撲架構

1. 一主多從

讀寫分離,Slave 可掛不同索引/引擎承擔不同查詢。Slave 過多時 Master 吐 Binlog 帶寬成瓶頸。

2. 雙主雙寫

互為主從,auto_increment_offset/auto_increment_increment 避免 ID 衝突。風險:邏輯衝突(同行異操作)無自動解決,MySQL 原生不支持多主寫入衝突檢測。

3. 雙主一寫一備

一主寫入,一主只讀做熱備,故障切換秒級。推薦生產環境。

4. 級聯複製

Slave 開啟 log-slave-updates 成為下一級 Master,減輕頂層 Master 壓力。

複製過濾

  • Master 端:binlog-do-db、binlog-ignore-db(慎用,影響恢復)
  • Slave 端:replicate-do-db、replicate-wild-do-table(推薦,靈活安全)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved