
GTID的基本概念与应用
定位事务来源:GTID可以帮助确定某个事务来自于哪个实例。 简化主从复制:通过GTID,主从复制无需手动指定binlog文件和位点信息,复制过程更加自动化。 运维管理:GTID使DBA更容易监控和管理复制关系,支持快速更换主从角色。 主库生成和记录GTID:主库执行变更操作时生成GTID,并将其记录在binlog中,以备后续复制使用。同时,主库会更新 从库同步和应用:从库接收主库发送的binlog事件,并根据记录的 GTID的持久化:在MySQL 5.7.5及以上版本,GTID信息可以通过 1.
2.
3.
4.
5.
GTID模块初始化及
事务包含对多个存储引擎的查询更新,会导致多个GTID分配。 主从库存储引擎不一致,可能导致数据不一致。 使用 只有在
发布日期:2021-05-18 09:16:26
浏览次数:24
分类:精选文章
本文共 2522 字,大约阅读时间需要 8 分钟。
GTID全局事务标识符(Global Transaction Identifier)
GTID的基本概念
全局事务标识符(GTID)是MySQL 5.6引入的一项特性,用于为每个事务分配一个全局唯一的标识符。GTID不仅在单个实例中有效,还在主从复制环境中保持唯一性。GTID的格式为server_uuid:sequence_id
,其中:
server_uuid
:一个由32字节加上一个校验字节(/0)组成的字符串。MySQL启动时生成,并将其写入datadir
目录下的auto.cnf
文件。如果server_uuid
丢失,MySQL会重新生成一个新的。sequence_id
:在binlog文件中递增且连续的整数值,用于跟踪同一server_uuid
下的事务。
GTID的主要作用是确保事务的全局唯一性,从而在复制过程中避免冲突并保证数据一致性。
GTID带来的便利性
GTID在主从复制中的工作原理
gtid_executed
表,记录已执行的GTID。gtid_next
值应用事务。从库会更新自己的gtid_executed
表,确保所有已执行的GTID信息准确无误。gtid_executed
表持久化存储。该表在数据库更新时会自动压缩,通过gtid_executed_compression_period
参数控制压缩频率,默认每1000条记录压缩一次。GTID的维护
1. gtid_executed
表
-
MySQL 5.7.5之前:
- 从库必须启用binlog并设置
log_slave_updates=on
,以确保从库执行的GTID信息记录到binlog中。
- 从库必须启用binlog并设置
-
MySQL 5.7.5之后:
- 新增了
mysql.gtid_executed
表。 - 若不启用binlog,GTID信息会记录到
gtid_executed
表中。 - 若启用binlog且
log_slave_updates=on
,GTID信息会同时记录到gtid_executed
表和binlog日志中。
- 新增了
2. gtid_executed
变量
- 该变量是一个GTID集合,存储在内存中,表示当前实例已执行的GTID事务。
show slave status\G
和show master status
命令中的Executed_Gtid_Set
值来源于此变量。
3. gtid_purged
变量
- 该变量也是一个GTID集合,表示当前实例已丢失的(已执行过的)GTID事务。
- 当purge命令或
expire_logs_days
参数删除历史binlog文件时,会清空gtid_purged
中的信息。 - 从库可以手动指定
gtid_purged
值,表示从库已执行了哪些GTID,从而重新开始复制。
4. gtid_mode
参数
GTID模式值 | 含义 |
---|---|
ON | 新事务为GTID事务,且只能复制GTID事务 |
ON_PERMISSIVE | 新事务为GTID事务,同时可复制GTID或匿名事务 |
OFF_PERMISSIVE | 新事务为匿名事务,同时可复制GTID或匿名事务 |
OFF | 新事务为匿名事务,且只能复制匿名事务 |
5. enforce_gtid_consistency
参数
含义 | 值 |
---|---|
不允许任何交易违反GTID一致性 | ON |
允许交易违反GTID一致性但生成警告 | WARN |
允许所有交易违反GTID一致性 | OFF |
GTID模块初始化及binlog_gtid_simple_recovery
参数
- GTID模块在初始化时会读取
binlog_gtid_simple_recovery
参数,默认值为ON
。该参数用于快速定位GTID信息,建议保留默认设置。
GTID的应用
1. 搭建主从复制
参数设置
server_id
:主从库的server_id
必须不同。log_bin
:主库必须启用binlog。binlog_format=row
:建议使用行模式。gtid_mode=on
:启用GTID模式。log_slave_updates=on
:在MySQL 5.6及以上版本中,控制GTID信息持久化介质。
配置修改
CHANGE MASTER TO MASTER_HOST='master2.example.com', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_AUTO_POSITION=1;
2. GTID复制架构到传统复制架构的转换
停止主从复制:
stop slave;
修改当前复制为传统模式:
change master to master_log_file='binlog.000005', master_log_pos=1968, master_auto_position=0;
启动复制:
start slave;
检查复制状态:
show slave status\G
GTID的限制
GTID对事务一致性的要求使得以下场景不支持:
CREATE TABLE ... SELECT
语句会生成两个事务,可能导致数据不一致。autocommit=1
时,才能支持CREATE TEMPORARY TABLE
和DROP TEMPORARY TABLE
语句。在GTID模式下,建议避免使用mysql_upgrade
工具进行升级,以免导致数据不一致。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月28日 03时03分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
leaflet叠加geojson图层(leaflet篇.38)
2025-04-04
leaflet叠加geojson图层(挖洞)(leaflet篇.43)
2025-04-04
leaflet叠加多个面(面的数据结构)(leaflet篇.62)
2025-04-04
leaflet图标跳动(leaflet篇.45)
2025-04-04
leaflet地图无级别缩放(移动端)(leaflet篇.76)
2025-04-04
leaflet实现wms服务面要素可点击(leaflet篇.30)
2025-04-04
Leaflet快速入门与加载OSM显示地图
2025-04-04
leaflet接入geoserver发布的热力图服务(leaflet篇.29)
2025-04-04
leaflet接入土地资源(leaflet篇.55)
2025-04-04
leaflet接入天地图(经纬度投影256)(leaflet篇.24)
2025-04-04
leaflet点采集与点编辑(leaflet篇.5)
2025-04-04
leaflet聚合图(leaflet篇.11)
2025-04-04
leaflet聚合图(大数据版)(leaflet篇.19)
2025-04-04
leaflet自定义地图样式地图(插件实现)(leaflet篇.18)
2025-04-04
leaflet虚线(leaflet篇.60)
2025-04-04
leaflet蜂巢图(leaflet篇.15)
2025-04-04
leaflet轨迹线(leaflet篇.58)
2025-04-04
leaflet面采集与面编辑(leaflet篇.7)
2025-04-04
leaflet饼状图(leaflet篇.74)
2025-04-04