文章目錄
一、MySQL 主從復制的本質原理
? 數據同步流程:
主從復制三大線程:
二、主從復制的三種模式
三、一主多從架構設計與應用
? ? 應用場景:
? 優勢:
四、單機模擬主從復制(實戰配置)
? ? 環境準備:
示例配置片段(my.cnf):
?設置主從關系:
五、主主復制(雙主復制)配置
? 原理:
?關鍵注意事項:
示例配置(主 A):
? ?使用場景:
六、項目中常見主從實踐方案
七、故障應對與運維建議
結語?
主從原理 + 多種復制場景 + 實戰配置,一次講清!
一、MySQL 主從復制的本質原理
MySQL 主從復制是通過 二進制日志(binlog)+ 中繼日志(relay log) 機制實現的。
? 數據同步流程:
1. 主庫開啟 binlog,記錄所有寫操作
2. 從庫的 I/O 線程向主庫請求 binlog
3. 主庫的 dump 線程將 binlog 發送給從庫
4. 從庫的 I/O 線程寫入 relay log
5. 從庫的 SQL 線程讀取 relay log 并執行
主從復制三大線程:
名稱 | 角色 | 功能 |
---|---|---|
Dump 線程 | 主庫 | 向從庫推送 binlog 內容 |
I/O 線程 | 從庫 | 拉取 binlog 并寫入中繼日志 |
SQL 線程 | 從庫 | 讀取中繼日志并執行 SQL |
二、主從復制的三種模式
模式 | 特點 | 延遲 | 一致性 |
---|---|---|---|
異步復制(默認) | 主庫執行完即返回 | 低 | 可能丟數據 |
半同步復制 | 至少一個從庫確認才返回 | 中 | 提高可靠性 |
GTID復制(基于事務ID) | 支持 failover 自動切換 | 更強一致性 | 更好容災支持 |
三、一主多從架構設計與應用
一主多從是 MySQL 構建讀寫分離的常見架構:
+-----------+| || Master || |+-----------+/ | \/ | \+--------+ +--------+ +--------+| Slave1 | | Slave2 | | Slave3 |+--------+ +--------+ +--------+
? ? 應用場景:
-
主庫處理寫操作(INSERT/UPDATE/DELETE)
-
從庫處理讀請求(SELECT)
-
配合中間件(如 MyCAT、ShardingSphere、ProxySQL)實現自動讀寫分離
? 優勢:
-
提升系統并發能力(讀寫分離)
-
降低主庫壓力
-
增加容災能力,主掛后可快速切換為從
四、單機模擬主從復制(實戰配置)
? ? 環境準備:
-
同一臺主機運行多個 MySQL 實例(如 3306、3307)
-
修改配置文件以區分實例
示例配置片段(my.cnf):
[mysqld]
server-id=1 # 主從必須唯一
log-bin=mysql-bin # 主庫需開啟binlog
port=3306[mysqld2]
server-id=2
relay-log=mysql-relay
port=3307
?設置主從關系:
-- 從庫配置
CHANGE MASTER TOMASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl_pass',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS= 154;START SLAVE;
SHOW SLAVE STATUS\G;
五、主主復制(雙主復制)配置
? 原理:
兩臺 MySQL 互為主從,都開啟 binlog 與 relay log。
+-----------+ +-----------+| Master A | <-----> | Master B |+-----------+ +-----------+
?關鍵注意事項:
-
兩邊寫入不能寫相同主鍵或數據 → 否則數據沖突
-
通常搭配 auto_increment_offset 和 auto_increment_increment 避免主鍵沖突
示例配置(主 A):
server-id=1
log-bin=mysql-bin
auto_increment_offset=1
auto_increment_increment=2
主 B:
server-id=2
log-bin=mysql-bin
auto_increment_offset=2
auto_increment_increment=2
? ?使用場景:
-
多活讀寫(慎用,建議僅讀活)
-
高可用自動切換(結合 MHA、Orchestrator 使用)
六、項目中常見主從實踐方案
項目場景 | 推薦方案 | 說明 |
---|---|---|
中小型系統 | 一主兩從 | 讀寫分離 + 冗余 |
高并發大讀量 | 一主多從(>3) | 配合 ProxySQL 或 LVS 負載 |
容災架構 | 主主復制 + keepalived | 主庫故障時自動切換 |
單機模擬開發 | 3306 + 3307 模擬主從 | 便于學習測試復制流程 |
七、故障應對與運維建議
-
定期監控 Slave_IO_Running/Slave_SQL_Running
-
配置 slave_skip_errors 時慎重使用
-
使用 pt-table-checksum 保證主從一致
-
設置從庫只讀:
read_only=ON
結語?
MySQL 的主從復制為分布式架構提供了堅實的基礎。不論是一主多從、主主復制,還是讀寫分離,在不同規模和業務需求下都能靈活組合構建高可用、高性能的數據庫架構。