GTID(Global Transaction Identifier,全局事务标识符)是MySQL 5.6及以上版本引入的重要特性,用于在主从复制环境中唯一标识每个事务,简化复制管理、故障转移和数据一致性维护。以下从多维度详细介绍GTID:

一、GTID的定义与核心作用

GTID是一个全局唯一的字符串,用于标识数据库中已提交的事务。它的核心作用是:

  • 在主从复制环境中,通过GTID追踪事务的执行状态,替代传统复制中依赖的“binlog文件名+位置”定位方式。
  • 确保每个事务在整个复制集群中具有唯一标识,便于快速判断从库是否已执行主库的所有事务,简化同步管理和故障转移。
二、GTID的组成结构

GTID的格式为**UUID:TRX_ID**,由两部分组成:

  • UUID(全局唯一标识符):标识产生事务的数据库实例(主库或从库),每个MySQL实例的auto.cnf文件中记录了自身的UUID(server-uuid),确保实例唯一。
  • TRX_ID(事务ID):在该实例上按顺序自增的整数,标识该实例上的第N个事务(从1开始累加)。

示例3E11FA47-71CA-11E1-9E33-C80AA9429562:10

  • 表示UUID为3E11FA47-71CA-11E1-9E33-C80AA9429562的实例上提交的第10个事务。
三、GTID的工作原理

GTID的核心逻辑是“事务与GTID一一绑定”,其工作流程可分为3个阶段:

1. 主库生成GTID

当主库提交一个事务时:

  • 若事务是写入操作(如INSERT/UPDATE/DELETE),MySQL会自动为该事务分配一个GTID(格式为“主库UUID:自增TRX_ID”)。
  • GTID会被写入主库的binlog中(作为事务的前缀,如SET @@SESSION.GTID_NEXT='UUID:TRX_ID'),同时记录事务内容。
2. 从库获取并执行GTID事务

从库通过IO线程读取主库的binlog,解析出GTID和对应的事务:

  • 从库先检查自身的gtid_executed集合(记录已执行的所有GTID),若该GTID未存在,则执行事务,并将GTID添加到gtid_executed中;
  • 若该GTID已存在,则跳过事务(避免重复执行)。
3. 复制状态追踪

通过GTID,可直接通过对比主库的gtid_executed(主库已执行的事务)和从库的gtid_executed,判断从库是否落后于主库,无需依赖binlog文件名和位置。

四、GTID复制与传统复制的核心区别

传统复制(基于binlog位置)与GTID复制的对比如下:

维度传统复制GTID复制
定位事务依赖master_log_filemaster_log_pos依赖GTID(自动定位需执行的事务)
故障转移需手动查找从库最后执行的binlog位置自动通过GTID匹配,无需手动定位
重复执行风险可能因位置错误导致重复执行基于GTID自动去重,避免重复执行
管理复杂度高(需记录和维护binlog位置)低(通过GTID自动管理同步状态)
五、GTID的核心优势
  1. 简化主从配置与故障转移
    搭建主从时,无需指定主库的binlog文件名和位置,只需通过MASTER_AUTO_POSITION=1开启自动GTID定位(如CHANGE MASTER TO MASTER_AUTO_POSITION=1)。
    主库故障后,从库可直接作为新主库,其他从库通过GTID自动同步新主库的事务,无需人工干预。

  2. 避免事务重复执行
    从库通过gtid_executed记录已执行的GTID,确保每个事务仅执行一次,解决传统复制中因位置错误导致的重复执行问题。

  3. 便于监控与审计
    通过SHOW GLOBAL VARIABLES LIKE 'gtid_executed'可直接查看实例已执行的所有事务,通过PERFORMANCE_SCHEMA可追踪事务的执行状态,便于问题排查。

  4. 支持并行复制优化
    在MySQL 5.7+中,GTID可与slave-parallel-type=LOGICAL_CLOCK配合,实现基于事务依赖的并行复制,提升从库同步效率。

六、GTID的使用场景

GTID主要用于主从复制环境,包括但不限于:

  • 一主多从、级联复制(主→从→从)架构;
  • 读写分离场景(确保从库数据与主库一致);
  • 高可用架构(如MGR、Keepalived+MySQL)中的故障自动转移;
  • 数据迁移(通过GTID确保迁移前后事务一致性)。
七、GTID的配置步骤

开启GTID需在主库和从库的my.cnf(或my.ini)中配置以下参数,重启MySQL生效:

1. 核心配置参数
参数名作用说明推荐值
gtid_mode开启GTID模式(OFF/ON/ON_PERMISSIVE/OFF_PERMISSIVEON
enforce_gtid_consistency强制GTID一致性(防止执行与GTID冲突的语句,如CREATE TABLE ... SELECTON
log_bin开启binlog(GTID依赖binlog记录事务)/var/log/mysql/mysql-bin.log
binlog_formatbinlog格式(GTID需配合ROW格式,确保事务一致性)ROW
server-id实例唯一ID(主从必须不同)主库1,从库2(示例)
2. 配置示例(主库和从库均需配置)
[mysqld]
server-id = 1  # 主库1,从库2
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
3. 验证GTID是否启用

登录MySQL后执行以下命令,若返回ON则表示启用成功:

SHOW VARIABLES LIKE 'gtid_mode';  -- 结果应为ON
SHOW VARIABLES LIKE 'enforce_gtid_consistency';  -- 结果应为ON
八、GTID的关键状态变量

通过以下变量可监控GTID的执行状态:

变量名含义
gtid_executed实例已执行的所有GTID(格式为UUID1:TRX_RANGE1,UUID2:TRX_RANGE2
gtid_purged已从binlog中清理的GTID(这些事务的binlog已被删除)
gtid_next下一个要执行的GTID(会话级变量,默认AUTOMATIC表示自动生成)
gtid_owned当前正在执行的GTID(未提交的事务)
九、使用GTID的注意事项
  1. 兼容性限制

    • 部分语句在enforce_gtid_consistency=ON时被禁止,如CREATE TABLE ... SELECTINSERT ... SELECT(需拆分为两个语句);
    • 不支持临时表的事务(CREATE TEMPORARY TABLE)在GTID模式下可能导致一致性问题,需避免。
  2. GTID的清理与维护

    • gtid_purged记录已清理的GTID,若从库的gtid_executed包含gtid_purged中的事务,主从复制可能失败(需确保从库先于主库清理GTID);
    • 可通过PURGE BINARY LOGS清理过期binlog,但需同步更新gtid_purged(自动关联)。
  3. 避免GTID冲突

    • 主从切换时,需确保新主库的gtid_executed包含所有从库的gtid_executed,否则可能出现GTID重复(导致事务执行失败);
    • 禁止在多个实例上手动设置相同的GTID(如SET GTID_NEXT='UUID:X'; BEGIN; ... COMMIT)。
  4. 降级与禁用GTID
    若需禁用GTID,需先将gtid_modeON逐步切换为ON_PERMISSIVEOFF_PERMISSIVEOFF,避免直接关闭导致复制中断。

十、常见问题与解决方案
  1. 从库提示“GTID在主库中不存在”
    原因:主库的gtid_purged已清理该GTID对应的binlog,从库无法获取事务。
    解决:重新搭建从库(通过全量备份+GTID同步)。

  2. 事务执行后GTID未记录
    原因:事务未写入binlog(如SET sql_log_bin=0关闭了binlog)。
    解决:确保sql_log_bin=1(默认开启),事务需写入binlog才会生成GTID。

  3. 主从GTID不一致
    原因:主库执行了从库未执行的事务,或从库多执行了事务。
    解决:通过pt-table-checksum校验数据一致性,手动补充缺失事务或回滚多余事务。

总结

GTID通过全局唯一标识事务,极大简化了MySQL主从复制的管理和故障转移,是大规模数据库集群中不可或缺的特性。掌握其原理、配置和注意事项,能有效提升复制架构的可靠性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86940.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86940.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86940.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专题:2025中国游戏科技发展研究报告|附130+份报告PDF、原数据表汇总下载

原文链接:https://tecdat.cn/?p42756 本报告汇总解读基于艾瑞咨询《2025中国游戏科技发展白皮书》、伽马数据《2025年1-3月中国游戏产业季度报告》、嘉世咨询《2025中国单机游戏市场现状报告》等多份行业研报数据。当《黑神话:悟空》以虚幻引擎5复刻东…

【数据挖掘】数据挖掘综合案例—银行精准营销

要求: 1、根据相关的信息预测通过电话推销,用户是否会在银行进行存款 2、数据bank.csv,约4520条数据,17个属性值 提示: 17个属性,分别是年龄,工作类型,婚姻状况,受教育…

postgresql查看锁的sql语句

发现一个查看postgresql锁比较好的sql语句,参考链接地址如下 链接地址 查看锁等待sql witht_wait as(select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.trans…

JSON 格式详解

JSON 格式详解 随着互联网的发展和各种 Web 应用程序的普及,数据交换已经成为了我们日常开发中的重要环节。而在各种数据交换格式中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易于阅…

原型设计Axure RP网盘资源下载与安装教程共享

对于初学者来说,我们熟悉一下其定义:‌Axure RP是一款常用的快速原型设计工具‌,主要用于创建应用软件或Web网站的线框图、流程图、原型和规格说明文档,广泛应用于产品经理、UI/UX设计师等专业领域。‌‌ 主要用户群体&#xff1…

iframe嵌套 redirect中转页面 route跳转

需求是项目A要使用iframe内嵌项目B的页面, 由于需要嵌套的页面很多,每个页面路径和参数又各不相同, 所以我们在项目B里做了一个中转页面,这样就能自己掌控项目A传递过来的东西了; routes.js 增加一个菜单:…

IP数据报 封装成 MAC帧 ( 目的MAC地址6B 源MAC地址6B 类型2B 数据部分 FCS校验和4B )

将 IP 数据报(Internet Protocol Datagram)封装成 MAC 帧 需要在数据链路层添加适当的头部信息,以便在局域网内进行传输。这个过程涉及将网络层(IP 层)的数据通过数据链路层(MAC 层)封装成适合物…

Note2.4 机器学习:Batch Normalization Introduction

Batch Normalization(批标准化,BN)通过标准化数据的操作,使得损失函数的优化地形(optimization landscape)更加平滑,从而达到更好地训练效果。BN常用于卷积神经网络(CNN)…

IDEA在AI时代的智能编程实践:从工蜂到通义灵码的效能跃迁‌‌

引言‌ 在腾讯云工作期间,我曾使用‌工蜂的AI代码补全功能,结合IntelliJ IDEA(以下简称IDEA)极大提升了开发效率。如今离开腾讯云,面对外部开发环境,如何继续利用AI提升编码效率?本文将系统梳理…

MySQL 慢查询日志详解

慢查询日志(Slow Query Log)是 MySQL 提供的一种核心性能优化工具,用于记录执行时间超过指定阈值的 SQL 语句。通过分析这些日志,可以定位数据库性能瓶颈,优化低效查询,提升系统整体效率。 一、慢查询日志的…

UV安装Python指南总结

UV安装Python指南总结 UV是一个Python包管理工具,它可以帮助我们安装和管理Python版本。以下是关于UV安装Python的主要功能和用法总结。 基本使用 安装最新版Python uv python install注意:UV使用Astral的python-build-standalone项目提供的Python发行版,而不是…

运维基础-MYSQL数据库-笔记

序 欠10年前自己的一份笔记,献给今后的自己。 数据库介绍 数据的时代 涉及的数据量大数据不随程序的结束而消失数据被多个应用程序共享大数据 数据库的发展史 萌芽阶段:文件系统 使用磁盘文件来存储数据初级阶段:第一代数据库 出现了网状…

从GPTs到Real智能体:目前常见的几种创建智能体方式

文章目录 智能体的三个发展阶段低阶智能体(面向过程) VS 高阶智能体(面向目标)主流智能体创建平台实践基础型平台cherry-studio豆包讯飞星火腾讯元器 高阶智能体开发体系cline开发套件Coze平台Dify开源框架Manus突破性方案 技术演进趋势总结 智能体的三个发展阶段 当前智能体技…

WPF 实现自定义数字输入弹窗

1.前端代码实现 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品识别系统flask

查看完整项目包点击文末名片 项目简介 本项目 基于YOLO的海洋垃圾物品识别系统 旨在利用深度学习中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;实现对海洋垃圾的自动识别与分类。通过构建一个基于Flask的Web应用&#xff0c;用户可以方便地上传图片&…

从数据到决策:UI前端如何利用数字孪生技术提升管理效率?

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型的深水区&#xff0c;企业管理者正面临数据过载与决策滞后的双重挑战 ——IDC 研…

Spring Boot高并发 锁的使用方法

Spring Boot高并发 锁的使用方法 在高并发场景中&#xff08;比如电商秒杀、抢票系统、转账交易&#xff09;&#xff0c;多个线程/用户会同时操作同一共享资源&#xff08;如库存、账户余额、订单号&#xff09;。如果不做控制&#xff0c;会导致数据错误&#xff08;如库存超…

二十九:Dynamic Prompts插件动态提示词讲解

引言:可变化提示词,随机抽取不固定 使用方式一:{提示词1|提示词2|。。。。}------从提示词种随机抽取生成 方式二:{25::提示词1|75::提示词2}------数字为每个提示词的占比,相当于权重 方式三:{2$$提示词1|提示词2|提示词3|提示词4|。。。}从中选区2个搭配生成(可以换 比…

vscode 改注释的颜色,默认是灰色的,想改成红色

修改VScode编辑器默认注释的颜色_databricks代码中怎么设置让注释是灰色的-CSDN博客 //改变注释颜色"editor.tokenColorCustomizations": {"comments": "#009933" // 注释}, //如果后面还加内容&#xff0c;记得块末用逗号隔开我自己用的vscdoe.…

chili3d笔记22 正交投影3d重建笔记3 面构建

双视图重建3d solid import { FaceNode } from "chili"; import {IDocument,IEdge,Logger,ShapeNode,XYZ } from "chili-core"; import { Graph } from "graphlib"; function pointToString(point: XYZ): string {return ${point.x.toFixed(0)}-…