前言
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等工具实现自动故障转移。
最佳实践提示:
-
变更前务必备份数据
-
生产环境建议先在测试环境验证
-
定期检查复制状态和延迟
希望本文对您有所帮助,欢迎在评论区交流讨论!