溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL主從復制的底層原理是什么

發布時間:2021-07-26 15:58:13 來源:億速云 閱讀:178 作者:Leah 欄目:數據庫
# MySQL主從復制的底層原理是什么

## 一、主從復制概述

MySQL主從復制(Replication)是指將一個MySQL數據庫服務器(主庫/Master)的數據復制到一個或多個MySQL數據庫服務器(從庫/Slave)的過程。這種架構設計主要服務于以下場景:

1. **讀寫分離**:主庫寫,從庫讀
2. **數據備份**:實時熱備份方案
3. **高可用基礎**:故障轉移的基礎架構
4. **橫向擴展**:分散查詢壓力

## 二、核心架構組件

### 1. 主庫組件
- **Binary Log(二進制日志)**:
  記錄所有修改數據的SQL語句(DDL和DML),以事件形式存儲
- **Dump Thread(轉儲線程)**:
  主庫上負責發送binlog到從庫的專用線程

### 2. 從庫組件
- **I/O Thread**:
  連接主庫,請求新的binlog事件并寫入relay log
- **SQL Thread**:
  讀取relay log中的事件并執行
- **Relay Log(中繼日志)**:
  存儲從主庫接收的binlog事件副本

## 三、復制工作原理詳解

### 1. 二進制日志記錄階段
當主庫執行事務時:
```sql
-- 示例事務
BEGIN;
UPDATE users SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET amount = amount + 100 WHERE id = 2;
COMMIT;

主庫的存儲引擎處理完成后: 1. 將事務寫入binlog(默認ROW格式記錄行變更) 2. 提交事務到存儲引擎 3. 通過sync_binlog參數控制刷盤策略

2. 日志傳輸階段

從庫I/O線程的工作流程: 1. 向主庫發送COM_BINLOG_DUMP命令 2. 主庫dump線程讀取binlog事件 3. 通過TCP連接發送到從庫 4. 從庫接收后寫入relay log 5. 更新master.info文件記錄復制位置

3. 事件重放階段

SQL線程執行流程: 1. 讀取relay log中的事件 2. 解析事件內容(區分不同格式的binlog) 3. 在從庫上執行對應的SQL語句 4. 更新relay-log.info文件記錄執行位置

四、復制格式類型

MySQL提供三種binlog格式:

格式類型 特點 適用場景
STATEMENT 記錄原始SQL語句 日志量小,但不安全
ROW 記錄行數據變化(默認) 數據安全,日志量大
MIXED 混合模式,智能切換 平衡安全性與性能

ROW格式示例

# UPDATE users SET name='張三' WHERE id=1
BINLOG '
...
### WHERE
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
###   @2='李四' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
### SET
###   @2='張三' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
...
'

五、關鍵參數解析

主庫核心參數

server-id = 1                # 必須唯一
log_bin = mysql-bin         # 啟用binlog
binlog_format = ROW         # 推薦ROW格式
sync_binlog = 1             # 事務提交同步刷盤
binlog_group_commit_sync_delay = 100  # 組提交優化

從庫核心參數

server-id = 2               # 區別于主庫
relay_log = mysql-relay     # 中繼日志路徑
log_slave_updates = ON      # 級聯復制時需要
read_only = ON              # 確保從庫只讀
slave_parallel_workers = 4  # 并行復制線程數

六、復制拓撲演進

  1. 傳統單線程復制

    • 所有SQL由單個線程順序執行
    • 存在嚴重的復制延遲問題
  2. 基于組的并行復制(5.7+):

    graph LR
    Coordinator-->Worker1
    Coordinator-->Worker2
    Coordinator-->Worker3
    
    • 同一組的事務可以并行執行
    • 通過slave_parallel_type=LOGICAL_CLOCK啟用
  3. 基于WRITESET的復制(8.0+):

    • 通過事務沖突檢測實現更高效的并行
    • 配置參數:
      
      binlog_transaction_dependency_tracking = WRITESET
      transaction_write_set_extraction = XXHASH64
      

七、數據一致性保障

1. 半同步復制(Semisynchronous)

sequenceDiagram
    Master->>Slave: 發送事務事件
    Slave-->>Master: ACK確認
    Master->>Client: 返回成功
  • 配置參數:
    
    INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
    SET GLOBAL rpl_semi_sync_master_enabled = 1;
    SET GLOBAL rpl_semi_sync_master_timeout = 10000; # 10秒超時
    

2. 復制校驗(8.0.16+)

-- 主庫生成校驗和
SELECT * FROM performance_schema.replication_group_member_checksums;
-- 從庫驗證
SELECT * FROM performance_schema.replication_group_member_checksums;

八、常見問題解決方案

  1. 復制延遲

    • 優化方案:啟用并行復制、升級硬件、減少大事務
  2. 數據不一致

    • 校驗工具:pt-table-checksum + pt-table-sync
    • 自動修復:通過GTID自動跳過錯誤
  3. 故障切換: “`sql – 傳統方式 STOP SLAVE; RESET SLAVE ALL; CHANGE MASTER TO…

– 使用GTID(推薦) SET GLOBAL gtid_purged=’’; CHANGE MASTER TO MASTER_AUTO_POSITION=1;


## 九、技術演進方向

1. **原子復制**(8.0+):
   - 保證DDL操作的原子性應用
   - 解決長期存在的復制中斷問題

2. **Clone Plugin**:
   ```sql
   -- 從庫快速重建
   INSTALL PLUGIN clone SONAME 'mysql_clone.so';
   CLONE INSTANCE FROM 'user'@'host':3306 IDENTIFIED BY 'password';
  1. InnoDB ReplicaSet(MySQL Shell):
    • 提供聲明式的復制管理接口
    • 簡化故障轉移操作流程

通過深入理解MySQL復制機制,可以構建更健壯的數據庫架構,為業務系統提供可靠的數據服務基礎。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女