导读:本期聚焦于小伙伴创作的《MySQL主从复制中的GTID是什么?一文搞懂MySQL全局事务ID原理与用法》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《MySQL主从复制中的GTID是什么?一文搞懂MySQL全局事务ID原理与用法》有用,将其分享出去将是对创作者最好的鼓励。

MySQL主从复制中的GTID全称为Global Transaction Identifier,也就是全局事务ID,是MySQL用来唯一标识每一个数据库事务的编号,在GTID模式下,主库上执行的每一个事务都会被分配一个全局唯一的ID,从库同步时会记录已经执行过的GTID集合,避免事务重复执行。

MySQL主从复制中的GTID是什么?一文搞懂MySQL全局事务ID原理与用法

GTID的基本结构

GTID由两部分组成,格式为source_id:transaction_id,其中source_id是生成事务的MySQL实例的UUID,每个MySQL实例启动时会自动生成一个唯一的UUID,存储在数据目录的auto.cnf文件中。transaction_id是一个从1开始递增的整数,表示该实例上执行的第N个事务。

例如一个GTID可能是3E11FA47-71CA-11E1-9E33-C80AA9429562:23,前半部分是实例UUID,后半部分表示该实例的第23个事务。

GTID的工作原理

在GTID模式的主从复制中,整个同步流程如下:

  • 主库执行事务时,会为事务分配一个GTID,同时把GTID和事务操作记录到binlog中
  • 从库的IO线程连接主库,拉取主库的binlog事件,其中就包含GTID信息,把这些事件写入到从库的中继日志(relay log)中
  • 从库的SQL线程读取中继日志中的事务,首先会检查该事务的GTID是否已经存在于从库已执行的GTID集合中
  • 如果GTID已经存在,说明该事务已经在从库执行过,SQL线程会跳过这个事务;如果不存在,就执行该事务,然后把GTID加入到从库的已执行GTID集合中

GTID与传统主从复制的差异

传统的主从复制依赖binlog的文件名和偏移量来定位同步位置,而GTID模式基于事务唯一标识来同步,两者的核心差异如下:

对比维度传统主从复制GTID主从复制
同步定位方式基于binlog文件名+偏移量基于全局事务ID
故障恢复复杂度主库故障后,从库需要手动找新的同步起点,容易出错从库自动识别未执行的GTID,自动同步,无需手动指定位置
事务重复执行风险容易因为偏移量计算错误导致事务重复执行从库自动校验GTID,避免重复执行
拓扑切换支持切换主从时需要重新配置同步位置,操作繁琐支持快速主从切换,新主库的GTID集合可以被从库自动识别

GTID模式的主从复制配置示例

以下是基于MySQL 8.0版本的GTID主从复制配置步骤,首先配置主库:

主库配置

修改主库的配置文件my.cnf,添加以下配置:

[mysqld]
# 开启GTID模式
gtid_mode=ON
# 强制GTID一致性,保证事务安全
enforce_gtid_consistency=ON
# 开启binlog
log_bin=mysql-bin
# 设置server-id,主从实例的server-id必须不同
server-id=1
# 选择行格式的binlog,GTID模式推荐使用行格式
binlog_format=ROW

重启主库后,创建用于主从同步的账号:

-- 创建同步账号,允许从库连接
CREATE USER 'repl'@'192.168.0.%' IDENTIFIED BY 'repl_password';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%';
FLUSH PRIVILEGES;

从库配置

修改从库的配置文件my.cnf,添加以下配置:

[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON
log_bin=mysql-bin
server-id=2
binlog_format=ROW
# 从库可选,开启只读
read_only=ON

重启从库后,配置主从同步连接:

-- 配置主库连接信息
CHANGE MASTER TO
MASTER_HOST='192.168.0.1',
MASTER_USER='repl',
MASTER_PASSWORD='repl_password',
MASTER_AUTO_POSITION=1;  -- 开启自动定位,基于GTID同步
-- 启动从库同步
START SLAVE;
-- 查看同步状态
SHOW SLAVE STATUSG

如果Slave_IO_RunningSlave_SQL_Running两个字段的值都是Yes,说明主从同步配置成功。

GTID使用注意事项

  • 开启GTID模式后,enforce_gtid_consistency必须设置为ON,否则MySQL会禁止执行可能导致GTID不一致的操作,比如CREATE TABLE ... SELECT语句
  • 已经运行的传统主从复制如果要切换到GTID模式,需要平滑升级,先确保所有实例都开启GTID相关配置,再逐步切换复制模式,避免同步中断
  • 从库的gtid_purged变量记录了已经被清理的binlog对应的GTID集合,初始化从库时如果需要从已有的备份恢复,需要正确设置这个变量,避免从库重复执行已经被清理的事务
GTID是MySQL主从复制中非常重要的特性,能够大幅降低主从同步的运维复杂度,尤其是在需要频繁切换主从、做高可用架构的场景下,GTID几乎是必选的配置项。开发者在实际使用时,需要充分理解GTID的生成和同步逻辑,避免因为配置不当导致同步异常。

GTIDMySQL主从复制全局事务IDbinlog修改时间:2026-07-11 15:30:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。