首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 5.6/5.7 GTID 主從復制部署實戰:自動定位、故障切換、多線程復制完整配置

     編輯:MySQL 資料庫相關知識

GTID (Global Transaction ID) 是 MySQL 5.6+ 引入的復制里程碑特性:用「事務唯一標識」替代傳統「文件+位點」,實現自動定位、故障自動切換、多線程並行復制。本文記錄基於 GTID 的生產級主從部署、參數調優、驗證、故障演練全流程。

一、GTID 核心概念

GTID = source_id:transaction_id
source_id = server_uuid (每實例唯一)
transaction_id = 該實例上執行的第 N 個事務 (從 1 遞增)

示例: 971d7245-c3f8-11e5-8b6b-000c2999e5a5:1-100
表示: server_uuid 為 971d... 的實例執行了第 1 到 100 號事務

優勢對比

特性傳統位點GTID
從庫定位手動指定 File+PosMASTER_AUTO_POSITION=1 自動
故障切換需計算新位點新主自動計算差集
多線程復制難以並行 (衝突檢測難)slave_parallel_type=LOGICAL_CLOCK 高效並行
數據一致性難以驗證GTID 集合直接對比

二、環境規劃

角色主機名IPServer IDMySQL 版本
Mastermasterdb.example.com172.16.88.20315.7.30
Slaveslavedb.example.com172.16.88.2052055.7.30

三、Master 配置 /etc/my.cnf

[mysqld]
server-id=1
gtid-mode=ON
enforce-gtid-consistency=ON
log-bin=/data/mysqlLog/logs/mysql-bin
binlog-format=ROW
log-slave-updates=1
sync_binlog=1
innodb_flush_log_at_trx_commit=1
expire_logs_days=7
max_binlog_size=1G
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log-events=1
transaction-isolation=READ-COMMITTED

四、Slave 配置 /etc/my.cnf

[mysqld]
server-id=205
gtid-mode=ON
enforce-gtid-consistency=ON
log-bin=/data/mysqlLog/logs/mysql-bin
binlog-format=ROW
log-slave-updates=1
sync_binlog=1
innodb_flush_log_at_trx_commit=1
skip-slave-start
relay-log=relay-bin
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4
slave-parallel-type=LOGICAL_CLOCK
relay-log-recovery=1
slave-sql-verify-checksum=1
transaction-isolation=READ-COMMITTED
read-only=1

五、部署步驟

  1. 雙節點分別安裝 MySQL、配置 my.cnf、啟動服務
  2. Master 創建復制用戶:
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.16.88.205' IDENTIFIED BY 'StrongReplPass';
  3. Master 熱備份基線:
    mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > full.sql
  4. Slave 導入基線:
    mysql < full.sql
  5. Slave 配置 GTID 復制:
    CHANGE MASTER TO MASTER_HOST='masterdb.example.com', MASTER_USER='repl', MASTER_PASSWORD='StrongReplPass', MASTER_AUTO_POSITION=1;
  6. 啟動復制:START SLAVE;

六、驗證復制狀態

SHOW SLAVE STATUS\G
# 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Retrieved_Gtid_Set: 971d7245-c3f8-11e5-8b6b-000c2999e5a5:1-6
Executed_Gtid_Set: 89e78301-c3f4-11e5-8b51-00505624d26a:1-3, 971d7245-c3f8-11e5-8b6b-000c2999e5a5:1-6
Auto_Position: 1

七、測試驗證

-- Master
CREATE DATABASE log_statics;
USE log_statics;
CREATE TABLE t (id INT PRIMARY KEY);
INSERT INTO t VALUES (1);

-- Slave
SHOW DATABASES LIKE 'log_statics';  -- 存在 ✅
SELECT * FROM log_statics.t;        -- 返回 1 ✅

八、故障切換演練 (Master 掛掉 → Slave 升主)

  1. 確認 Slave 同步無延遲 (Seconds_Behind_Master=0)
  2. Slave 執行:STOP SLAVE; RESET SLAVE ALL; SET GLOBAL read_only=OFF;
  3. 應用端修改連接地址指向新主
  4. 原 Master 恢復後作為新 Slave 接入:
    CHANGE MASTER TO MASTER_HOST='新主IP', MASTER_AUTO_POSITION=1; START SLAVE;

九、多線程復制深度調優

# Slave 端
slave_parallel_workers=8                    # CPU 核心數 1-2 倍
slave_parallel_type=LOGICAL_CLOCK           # 基於組提交並行
slave_preserve_commit_order=1               # 保證提交順序一致性
slave_checkpoint_group=512                  # 減少檢查點頻率
slave_checkpoint_period=2                   # 秒
relay_log_recovery=ON                       # 崩潰安全恢復

十、監控指標體系

指標來源告警閾值
Slave_IO_RunningSHOW SLAVE STATUS≠ Yes 立即告警
Slave_SQL_RunningSHOW SLAVE STATUS≠ Yes 立即告警
Seconds_Behind_MasterSHOW SLAVE STATUS> 30s 警告, > 300s 嚴重
Executed_Gtid_Set 差集對比 Master/Slave非空即不一致
Relay_Log_SpaceSHOW SLAVE STATUS> 10G 檢查積壓
Slave_Rows_Appliedperformance_schema突降檢查阻塞
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved