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

MySQL 5.6 GTID 主從複制搭建全流程:從環境準備到故障切換的生產級實踐

     編輯:MySQL 綜合教學

GTID 核心原理:全局事務 ID = 精準定位 + 簡化運維

GTID (Global Transaction Identifier) 格式:source_id:transaction_id

  • source_id = 主庫 server_uuid (自動生成,auto.cnf 存儲)
  • transaction_id = 該主庫上執行的第 N 個事務 (從 1 遞增)
  • 核心承諾: 事務與 GTID 1:1 映射,同一 GTID 在拓撲中至多執行一次

GTID vs 傳統複制 (文件+位置)

維度傳統複制GTID 複制
定位方式MASTER_LOG_FILE + MASTER_LOG_POSMASTER_AUTO_POSITION=1
故障切換需手動計算新位置、易出錯自動定位、CHANGE MASTER TO MASTER_AUTO_POSITION=1
多級複制極其複雜天然支援
數據一致性驗證困難gtid_executed 集合比對即可
啟用條件無gtid_mode=ON、enforce_gtid_consistency=ON、log_bin、log_slave_updates

一、環境準備與規劃

角色主機名IPServer IDMySQL 版本
Mastermasterdb.example.com172.16.88.20015.6.23
Slaveslavedb.example.com172.16.88.2052055.6.23
  • OS: CentOS 6.5 64位
  • 資料目錄: /data/mysqldata
  • 日誌目錄: /data/mysqlLog/logs
  • 用戶/組: mysql:mysql

二、關鍵配置參數解析 (雙端必備)

## 1. 建立目錄與用戶
mkdir -p /data/mysqldata /data/mysqlLog/logs
groupadd -r mysql && useradd -g mysql -r -s /sbin/nologin -M -d /data/mysqldata mysql
chown -R mysql:mysql /data/mysqldata /data/mysqlLog

## 2. 解壓官方二進制包 (以 5.6.23 為例)
tar xf mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/mysql-5.6.23-linux-glibc2.5-x86_64 /usr/local/mysql

## 3. 初始化系統表
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysqldata/

## 4. 註冊服務與環境
cp support-files/mysql.server /etc/init.d/mysqld
cp support-files/my-default.cnf /etc/my.cnf  # 稍後覆蓋為生產配置
chkconfig --add mysqld && chkconfig mysqld on
echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh && source /etc/profile.d/mysql.sh

## 5. 載入庫/頭文件/Man
ln -s /usr/local/mysql/include /usr/include/mysql
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf && ldconfig
echo 'MANPATH /usr/local/mysql/man' >> /etc/man.config

四、啟動雙端並建立複制關係

1. 啟動服務

mysql -uroot -p -e "
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'172.16.88.%' IDENTIFIED BY 'ReplPass123!';
FLUSH PRIVILEGES;
"

3. Slave 配置複制並啟動 (GTID 方式無需手動指定 File/Position)


4. 驗證複制狀態

:1-XX
## Executed_Gtid_Set: :1-XX, :1-YY
## Auto_Position: 1

五、測試驗證與常見故障處理

1. 基本寫入測試


2. 常見故障與解決

故障現象原因解決
Slave_IO_Running: Connecting網絡不通/防火牆/用戶權限/密碼錯誤telnet master 3306、檢查防火牆、驗證 GRANT 主機匹配
Slave_SQL_Running: NoSQL 執行錯誤 (主鍵衝突、外鍵失敗、表不存在)SHOW SLAVE STATUS\G 看 Last_SQL_Error、按需跳過/修復
GTID 集合不一致Slave 獨立寫入/誤操作/舊數據重新搭建 Slave 或使用 SET GTID_PURGED 修正 (謹慎)
Seconds_Behind_Master 偏大大事務/慢查詢/鎖等待/並行度不足優化 SQL、調大 slave_parallel_workers、檢查主庫負載
啟用 GTID 報錯enforce_gtid_consistency 違規 (如 CREATE TEMPORARY TABLE 在事務中)修正應用 SQL 模式、避免非事務表混用

六、生產級運維建議

  1. 監控指標: Seconds_Behind_Master、Slave_IO/SQL_Running、Relay_Log_Space、GTID 集合一致性
  2. 備份策略: Slave 停庫物理備份 (XtraBackup) 或邏輯備份 (mysqldump --master-data=2)
  3. 故障切換: 推薦 Orchestrator / MHA 自動化,利用 GTID 自動定位
  4. 版本升級: 5.6 → 5.7/8.0 可滾動升級 (Slave 先升、切換、Master 升),GTID 相容
  5. 安全: 複制專用用戶、最小權限、SSL 加密傳輸、防火牆限制來源 IP

總結

MySQL 5.6 GTID 複制核心優勢在於 自動定位 (MASTER_AUTO_POSITION=1) 與 事務級一致性保證。生產部署必須嚴格遵循:配置核心三件套 (gtid_mode/enforce_gtid_consistency/log_slave_updates) → ROW 格式 + 校驗 → TABLE 存儲庫 → 並行 SQL 線程。搭配 Orchestrator 實現自動故障切換,構建高可用 MySQL 集群。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved