溫馨提示×

溫馨提示×

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

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

MySQL主從復制重點知識整理

發布時間:2021-08-27 15:56:15 來源:億速云 閱讀:108 作者:chen 欄目:編程語言
# MySQL主從復制重點知識整理

## 一、主從復制概述

### 1.1 基本概念
MySQL主從復制(Replication)是指將一個MySQL數據庫服務器(主庫Master)的數據復制到另一個或多個MySQL服務器(從庫Slave)的過程。主要特點包括:
- **異步復制**:默認工作模式,主庫不等待從庫確認
- **單向復制**:數據只能從主庫流向從庫
- **級聯復制**:Slave可以作為其他Slave的Master

### 1.2 核心應用場景
- **讀寫分離**:主庫寫,從庫讀
- **數據備份**:實時熱備份方案
- **高可用基礎**:故障轉移的基礎架構
- **負載均衡**:分散讀請求壓力
- **數據分析**:在從庫執行不影響業務的統計查詢

## 二、復制原理與架構

### 2.1 三線程模型
| 線程類型 | 所屬服務器 | 職責描述 |
|---------|-----------|---------|
| Binlog Dump | Master | 讀取主庫binlog并發送給Slave |
| I/O Thread | Slave | 接收Master的binlog并寫入relay log |
| SQL Thread | Slave | 讀取relay log并重放事件 |

### 2.2 數據流轉過程
1. 主庫將變更記錄到二進制日志(binlog)
2. 從庫I/O線程請求主庫的binlog
3. 主庫Binlog Dump線程推送日志到從庫
4. 從庫將日志寫入中繼日志(relay log)
5. 從庫SQL線程重放relay log中的事件

### 2.3 重要日志文件
- **binlog**:主庫的二進制日志,三種格式可選
  - STATEMENT:記錄SQL語句(5.7默認)
  - ROW:記錄行數據變化(8.0默認)
  - MIXED:混合模式
- **relay log**:從庫的中繼日志,格式與binlog相同
- **master.info**:從庫保存的主庫連接信息(8.0后存入表)
- **relay-log.info**:從庫執行的relay log位置信息

## 三、配置實踐指南

### 3.1 主庫配置(my.cnf)
```ini
[mysqld]
server-id = 1                # 必須唯一
log_bin = mysql-bin          # 開啟binlog
binlog_format = ROW          # 推薦使用ROW格式
binlog_row_image = FULL       # 記錄完整的行信息
sync_binlog = 1              # 每次事務提交都刷盤
expire_logs_days = 7         # 自動清理舊日志

3.2 從庫配置(my.cnf)

[mysqld]
server-id = 2                # 區別于主庫
relay_log = mysql-relay      # 中繼日志位置
read_only = ON               # 設為只讀(超級用戶除外)
log_slave_updates = ON       # 級聯復制時需要

3.3 建立復制鏈路

-- 主庫創建復制賬號
CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- 從庫配置主庫信息(8.0+)
CHANGE MASTER TO
  MASTER_HOST = 'master_host',
  MASTER_USER = 'repl',
  MASTER_PASSWORD = 'SecurePass123!',
  MASTER_PORT = 3306,
  MASTER_AUTO_POSITION = 1;  # GTID模式

-- 啟動復制
START SLAVE;

四、高級特性與優化

4.1 GTID復制(MySQL 5.6+)

全局事務標識(Global Transaction Identifier): - 格式:source_id:transaction_id - 優點: - 簡化故障恢復 - 自動定位復制位置 - 避免重復執行事務 - 啟用方式:

  gtid_mode = ON
  enforce_gtid_consistency = ON

4.2 半同步復制

確保至少一個從庫接收binlog后主庫才提交:

-- 主庫安裝插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

-- 從庫安裝插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

-- 配置參數
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

4.3 延遲復制

人為設置從庫延遲(用于誤操作恢復):

CHANGE MASTER TO MASTER_DELAY = 3600;  # 延遲1小時

4.4 多線程復制

-- 基于庫的并行復制(5.6)
slave_parallel_workers = 4

-- 基于邏輯時鐘的并行復制(5.7+)
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 8

五、監控與故障處理

5.1 關鍵監控命令

SHOW MASTER STATUS;          # 查看主庫binlog位置
SHOW SLAVE STATUS\G          # 查看從庫復制狀態
SHOW PROCESSLIST;            # 查看復制線程

-- 復制延遲監控(Seconds_Behind_Master不完全準確)
SELECT 
  NOW() - MAX(ts) AS replica_lag 
FROM 
  mysql.replica_status;

5.2 常見故障處理

  1. 主鍵沖突

    • 檢查表結構是否一致
    • 臨時跳過錯誤:
      
      SET GLOBAL sql_slave_skip_counter = 1;
      START SLAVE;
      
  2. 網絡中斷

    • 檢查Last_IO_Error字段
    • 重新配置CHANGE MASTER
  3. 數據不一致

    • 使用pt-table-checksum檢測
    • 通過pt-table-sync修復

六、最佳實踐建議

  1. 版本一致性:主從建議使用相同大版本MySQL
  2. 監控告警:對Seconds_Behind_Master和復制錯誤設置監控
  3. 定期校驗:使用工具定期檢查數據一致性
  4. 備份策略:即使有從庫也需定期物理備份
  5. 故障演練:定期模擬主庫故障測試切換流程

注:本文基于MySQL 8.0版本整理,部分參數在早期版本可能不同。生產環境建議結合官方文檔進行配置。 “`

(全文約1350字,涵蓋MySQL主從復制核心知識點)

向AI問一下細節

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

AI

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