前言
MySQL主從復制是企業級數據庫架構的基礎,而GTID(Global Transaction Identifier)模式則是MySQL 5.6版本后推出的革命性復制技術。本文將詳細介紹如何配置基于GTID的主從同步,并包含實用的故障轉移操作指南。
?
一、GTID模式核心優勢
相比傳統基于binlog位置的主從復制,GTID模式具有以下優勢:
-
自動故障恢復:無需記憶復雜的binlog位置
-
簡化配置:
MASTER_AUTO_POSITION=1
自動定位同步點 -
高可靠性:全局唯一事務ID確保數據一致性
-
支持復雜拓撲:輕松實現多源復制和環形復制
?
二、主庫配置詳解
1. 修改MySQL配置文件(my.cnf)
?
[mysqld]
# 基礎配置
server-id = 1 ? ? ? ? ? ? ? ?# 必須唯一
log_bin = mysql-bin ? ? ? ? ?# 開啟二進制日志# GTID核心配置
gtid_mode = ON ? ? ? ? ? ? ? # 啟用GTID模式
enforce_gtid_consistency = ON # 強制GTID一致性# 推薦配置
binlog_format = ROW ? ? ? ? ?# 推薦使用ROW格式
binlog_row_image = FULL ? ? ?# 完整行鏡像
log_slave_updates = ON ? ? ? # 從庫也記錄二進制日志(級聯復制時需要)
sync_binlog = 1 ? ? ? ? ? ? ?# 每次事務都同步binlog到磁盤# 性能優化參數
binlog_group_commit_sync_delay = 100?
binlog_group_commit_sync_no_delay_count = 10
關鍵參數說明:
-
gtid_mode
:必須開啟才能使用GTID復制 -
enforce_gtid_consistency
:確保事務符合GTID要求 -
binlog_format=ROW
:推薦使用行模式,數據一致性更好
?
2. 創建復制賬號
-- 安全建議:使用mysql_native_password插件
CREATE USER 'repl_standby' IDENTIFIED WITH mysql_native_password BY 'Standby_Repl123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl_standby';
FLUSH PRIVILEGES;?
安全提示:
-
避免使用弱密碼
-
生產環境建議限制IP訪問(如
'repl'@'192.168.1.%'
) -
MySQL 8.0+默認使用caching_sha2_password,舊版客戶端需指定mysql_native_password
三、從庫配置詳解
1. 修改MySQL配置文件
[mysqld]
# 基礎配置
server-id = 2 ? ? ? ? ? ? ? ?# 必須唯一且與主庫不同
log_bin = mysql-bin ? ? ? ? ?# 推薦從庫也開啟二進制日志# GTID配置
gtid_mode = ON ? ? ? ? ? ? ??
enforce_gtid_consistency = ON
log_slave_updates = ON ? ? ? # 允許從庫記錄二進制日志# 安全配置
read_only = ON ? ? ? ? ? ? ? # 設置從庫為只讀模式
super_read_only = ON ? ? ? ? # 禁止包括超級用戶在內的所有寫入
skip_slave_start = ON ? ? ? ?# 啟動時不自動開始復制
關鍵參數說明:
-
read_only
和super_read_only
:防止從庫被意外寫入 -
skip_slave_start
:避免重啟后自動連接可能有問題的主庫
2. 配置主從連接
CHANGE MASTER TO
MASTER_HOST = 'master_ip', ? ? ?-- 替換為主庫實際IP
MASTER_USER = 'repl_standby', ? -- 復制賬號
MASTER_PASSWORD = 'Standby_Repl123!',
MASTER_AUTO_POSITION = 1; ? ? ? # 關鍵參數,啟用GTID自動定位-- 啟動復制
START SLAVE;
3. 驗證復制狀態
SHOW SLAVE STATUS;?
重點關注字段:
-
Slave_IO_Running
: Yes -
Slave_SQL_Running
: Yes -
Retrieved_Gtid_Set
: 已接收的GTID集合 -
Executed_Gtid_Set
: 已執行的GTID集合 -
Seconds_Behind_Master
: 復制延遲秒數
四、故障轉移操作指南
-- 停止復制
STOP SLAVE;-- 重置復制信息
RESET MASTER; ?-- 或 RESET SLAVE ALL;-- 恢復寫能力
SET GLOBAL read_only = 0;
SET GLOBAL super_read_only = 0;
2. 原主庫恢復后作為新從庫
-- 在新主庫上創建復制賬號(如尚未創建)
CREATE USER 'repl_standby' IDENTIFIED WITH mysql_native_password BY 'Standby_Repl123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl_standby';-- 在原主庫上配置復制
CHANGE MASTER TO
MASTER_HOST = 'new_master_ip',
MASTER_USER = 'repl_standby',
MASTER_PASSWORD = 'Standby_Repl123!',
MASTER_AUTO_POSITION = 1;START SLAVE;
五、常見問題解決方案
1. GTID模式啟用失敗
錯誤:The value of @@GLOBAL.GTID_MODE can only be changed one step at a time
解決方案:
-- 分步執行
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
SET @@GLOBAL.GTID_MODE = ON;
?2. 復制中斷處理
查看錯誤原因:
?SHOW SLAVE STATUS
-- 查看Last_IO_Error和Last_SQL_Error字段
跳過指定錯誤:
STOP SLAVE;
SET GTID_NEXT='aaa-bbb-ccc:123'; -- 指定要跳過的事務GTID
BEGIN; COMMIT;
SET GTID_NEXT='AUTOMATIC';
START SLAVE;
六、性能優化建議?
-
網絡優化:
-
主從服務器盡量同機房部署
-
使用萬兆網絡連接
-
-
參數調優:
slave_parallel_workers = 4 ? ? ?# 并行復制線程數
slave_parallel_type = LOGICAL_CLOCK ?# 基于事務依賴的并行復制
-
監控建議:
-
監控
Seconds_Behind_Master
-
設置
slave_net_timeout
避免網絡問題導致長時間等待
-
結語
GTID模式極大簡化了MySQL主從復制的管理和維護工作。通過本文的配置指南,您可以快速搭建高可用的MySQL復制環境。實際生產環境中,建議結合MHA或Orchestrator等工具實現自動故障轉移。
最佳實踐提示:
-
變更前務必備份數據
-
生產環境建議先在測試環境驗證
-
定期檢查復制狀態和延遲
希望本文對您有所幫助,歡迎在評論區交流討論!
?
?
?
?
?