记录一下:MySQL 主从复制与 GTID 模式详解
引言
MySQL 主从复制是构建高可用系统的基础。传统的基于文件位置(File-Position)的复制模式在故障转移时容易出现数据不一致问题,而 GTID(Global Transaction ID)模式提供了更安全的复制机制。本文详细阐述 GTID 模式的工作原理与实际应用。
GTID 与传统复制对比
文件位置模式的问题:
主库故障转移时,难以确定从库同步到哪个位置
多从库转移时容易产生数据分歧
需要手动计算 binlog 偏移量
GTID 模式的优势:
全局唯一事务 ID,自动跟踪所有已执行的事务
故障转移时无需手动指定位置,从库自动找到正确的断点
支持多源复制与故障自动转移(结合 Sentinel)
GTID 的核心概念
GTID 格式: server-uuid:transaction-id
例如: 3E11FA47-71CA-11E1-9E33-C80AA9429562:23
server-uuid
: 服务器全局唯一标识(第一次启动自动生成,存储在 auto.cnf)transaction-id
: 该服务器上执行的事务序列号,从 1 开始递增
GTID 集合: 表示已执行的所有 GTID
例如: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-10,3E11FA47-71CA-11E1-9E33-C80AA9429563:1-5
实战配置
主库配置 (my.cnf
):
[mysqld]
server-id = 1
gtid-mode = ON
enforce-gtid-consistency = ON
log-bin = mysql-bin
binlog-format = ROW
从库配置 (my.cnf
):
[mysqld]
server-id = 2
gtid-mode = ON
enforce-gtid-consistency = ON
relay-log = mysql-relay-bin
skip-slave-start = ON
建立复制关系 (从库执行):
CHANGE MASTER TO
MASTER_HOST = '192.168.1.10',
MASTER_USER = 'repl_user',
MASTER_PASSWORD = 'password',
MASTER_AUTO_POSITION = 1;
START SLAVE;
SHOW SLAVE STATUS\G
常见问题排查
1. 从库延迟过高
检查从库的
Seconds_Behind_Master
考虑在从库启用并行复制:
slave-parallel-workers = 4
优化从库硬件(特别是磁盘 IO)
2. 复制中断
查看
Last_Error
字段常见原因:表结构差异、主键冲突、存储空间不足
通过
SHOW SLAVE STATUS
获取详细错误信息
3. GTID 不一致
执行
RESET MASTER; RESET SLAVE ALL;
后重新初始化使用
mysqldump
进行逻辑备份,确保主从数据一致
总结
GTID 模式大幅简化了 MySQL 主从复制的管理,特别是在故障转移和多源复制场景。建议生产环境优先采用 GTID 模式,并配合 Sentinel 实现自动故障转移。