6. Mysql里面的GTID 全局事务标识 介绍

GTID学习记录 来源

  1. 知乎阿里云:MySQL 基于GTID复制实现的工作原理
  2. MySQL的GTID主从搭建及内部原理
  3. MySQL5.7杀手级新特性:GTID原理与实战

文章目录

  • 1 什么是GTID
  • 2 GTID的组成部分
  • 3 GTID如何产生
  • 4 GTID的工作原理
  • 5 GTID的生成和使用由以下几步组成:
  • 6 GTID和Binlog的关系


1 什么是GTID

GTID (Global Transaction IDentifier) 是全局事务标识。它具有全局唯一性,一个事务对应一个GTID。唯一性不仅限于主服务器,GTID在所有的从服务器上也是唯一的。一个GTID在一个服务器上只执行一次,从而避免重复执行导致数据混乱或主从不一致。

在传统的复制里面,当发生故障需要主从切换时,服务器需要找到binlog和pos点,然后将其设定为新的主节点开启复制。相对来说比较麻烦,也容易出错。在MySQL 5.6里面,MySQL会通过内部机制自动匹配GTID断点,不再寻找binlog和pos点。我们只需要知道主节点的ip,端口,以及账号密码就可以自动复制。


2 GTID的组成部分

  • GDIT由两部分组成:GTID = source_id:transaction_id。
  1. 其中source_id是产生GTID的服务器,即是server_uuid,在第一次启动时生成(sql/mysqld.cc: generate_server_uuid()),并保存到DATADIR/auto.cnf文件里。
  2. transaction_id是序列号(sequence number),在每台MySQL服务器上都是从1开始自增长的顺序号,是事务的唯一标识。

例如:3E11FA47-71CA-11E1-9E33-C80AA9429562:23 GTID 的集合是一组GTIDs,可以用source_id+transaction_id范围表示,例如:3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5 复杂一点的:如果这组 GTIDs 来自不同的 source_id,各组 source_id 之间用逗号分隔;如果事务序号有多个范围区间,各组范围之间用冒号分隔,例如:3E11FA47-71CA-11E1-9E33-C80AA9429562:23,3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5


3 GTID如何产生

GTID的生成受GTID_NEXT控制。

在主服务器上,GTID_NEXT默认值是AUTOMATIC,即在每次事务提交时自动生成GTID。它从当前已执行的GTID集合(即gtid_executed)中,找一个大于0的未使用的最小值作为下个事务GTID。同时在实际的更新事务记录之前,将GTID写入到binlog(set GTID_NEXT记录)。 在Slave上,从binlog先读取到主库的GTID(即get GTID_NEXT记录),而后执行的事务采用该GTID。


4 GTID的工作原理

GTID在所有主从服务器上都是不重复的。所以所有在从服务器上执行的事务都可以在binlog找到。一旦一个事务提交了,与拥有相同GTID的后续事务都会被忽略。这样可以保证从服务器不会重复执行同一件事务。

当使用GTID时,从服务器不需要保留任何非本地数据。使用数据都可以从replicate data stream。


5 GTID的生成和使用由以下几步组成:

  1. 主服务器更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
  2. binlog传送到从服务器后,被写入到本地的relay log中。从服务器读取GTID,并将其设定为自己的GTID(GTID_NEXT系统)。
  3. sql线程从relay log中获取GTID,然后对比从服务器端的binlog是否有记录。
  4. 如果有记录,说明该GTID的事务已经执行,从服务器会忽略。
  5. 如果没有记录,从服务器就会从relay log中执行该GTID的事务,并记录到binlog。

6 GTID和Binlog的关系

MySQL5.7杀手级新特性:GTID原理与实战

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

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

相关文章

Linux学习随笔

进程 每个进程都有对应的文件句柄空间,以及一个用户栈和内核栈 冷、热启动 "冷启动"是指将电子设备从完全关机的状态重新启动的过程。在开发板的上下文中,冷启动通常意味着关闭电源然后重新打开,或者通过物理按钮或者开关来触发重…

appium2报错:Failed to create session. ‘automationName‘ can‘t be blank

1、问题概述? 今天在window环境中安装了appium2.5.2版本,通过appium inspector连接真机的时候报错如下: Failed to create session. automationName cant be blank 原因分析:这是因为appium2的比appium1有了很大的改进&#xff…

TCP连接状态如何判断

在嵌入式C语言环境中,当TCP客户端与服务端正常连接并持续发送消息时,若遇到异常情况导致连接断开,可以通过以下几种方法来检测这种异常断开: 1. 使用select()或poll()系统调用: 通过select()或poll()函数可以监控套…

Linux 指令之文件

1.开发背景 记录 linux 下对文件操作的指令 2.开发需求 记录常用的文件操作指令 3.开发环境 linux 操作系统,如果不支持需要查看是否存在对应的可执行文件 4.实现步骤 4.1 查找字符串 查找指定目录下包含指定的字符串 grep -rn "Timer frequency" .…

python中如何求阶乘

第一种、利用functools工具处理 import functools result (lambda k: functools.reduce(int.__mul__, range(1, k 1), 1))(5) print(result)第二种、普通的循环 x 1 y int(input("请输入要计算的数:")) for i in range(1, y 1):x x * i print(x) 第三种、利用…

java web编程技术

前面首先记录一些关键的/重要的/不好记的短语/单词/词汇,之后的之后再说 Browser 浏览器 Server 服务器 client 客户端 服务器编程语言有三种: ASP(Active server page)动态服务器页面 PHP(Personal home page)超文本预处理器 JSP(Java server pa…

什么是世面,是世界的每一面!

什么是世面:探索世界的多维度面貌 我们经常会听到“见世面”这个词汇,它通常用来形容一个人通过广泛的旅行、阅读和社交活动,积累了丰富的知识和经验,从而对世界有了更深刻的理解和认识。但“世面”究竟是什么?它不仅…

美格智能出席紫光展锐第三届泛金融支付生态论坛,引领智慧金融变革向新

4月16日,以“融智创新,共塑支付产业新生态”为主题的紫光展锐第三届泛金融支付生态论坛在福州举办,来自金融服务机构、分析师机构、终端厂商、模组厂商等行业各领域生态伙伴汇聚一堂,探讨金融支付产业的机遇与挑战。作为紫光展锐重…

浮点数的存储方式、bf16和fp16的区别

目录 1. 小数的二进制转换2. 浮点数的二进制转换3. 浮点数的存储3.1 以fp32为例3.2 规约形式与非规约形式 4. 各种类型的浮点数5. BF16和FP16的区别Ref 1. 小数的二进制转换 十进制小数转换成二进制小数采用「乘2取整,顺序排列」法。具体做法是:用 2 2…

数据结构复杂度

算法的时间复杂度 常对幂指阶 小练习1 小练习2

【实战】Dubbo应用可观测性升级指南与踩坑记录

应用从dubbo-3.1.*升级到dubbo-*:3.2.*最新稳定版本,提升dubbo应用的可观测性和度量数据准确性。 1. dubbo版本发布说明(可不关注) dubbo版本发布 https://github.com/apache/dubbo/releases 【升级兼容性】3.1 升级到 3.2 2. 应用修改点 注意:Sprin…

腾讯ieg后台开发4.16一面java

1.自我介绍 2.项目介绍 3.关于布隆过滤器 用来做什么的 4.原理了解吗 5.假阳率的概念了解吗 6.什么原因导致的(这个不太知道 答的哈希碰撞?) 7.数据库是mysql,那需要优化mysql出现的一些慢查询,你一般会有哪些措…

获取拼多多百亿补贴商品详情数据

公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认yes&#…

25、Lua 学习笔记之三(高阶话题)

Lua 学习笔记之三 高阶话题迭代实例代码有关迭代的描述 协作线程实例代码有关协作线程的描述 高阶话题 迭代 实例代码 --迭代 local function enum(array)local index 1return function()local ret array[index]index index 1return retend endlocal function foreach(a…

pg_top 实时监控工具-配置临时service

os: centos 7.9.2009 db: postgresql 14.7 监控脚本 su - pgsql touch tmp_pg_top_status.sh chmod 777 tmp_pg_top_status.shtmp_pg_top_status.sh 内容如下 #!/bin/sh while true ; do/data/pgsql/14/bin/pg_top -p 5432 -U dba -d rdsdb -b -R -Xsleep 2s;done 临时 se…

36-4 PHP 代码审计基础

一、 代码审计思路 1. 正向查找: 在进行正向查找时,通常按照以下步骤进行: 功能点了解: 首先,了解网站的功能点和业务逻辑,明确可能存在的漏洞类型。 入口文件检查: 查看网站的入口文件,通常是 index.php,逐行分析其代码,关注可能存在漏洞的代码段。 逐行审查: 对…

qutip,一个高级的 Python 量子力学研究库!

目录 前言 安装 特性 基本功能 量子态的创建和操作 量子态的测量 示例代码 动力学模拟 高级功能 退相干和噪声模拟 控制和优化 量子信息学工具 实际应用场景 量子态演化研究 量子计算机模拟 量子纠错协议 总结 前言 大家好,今天为大家分享一个高级的 Pytho…

Objective-C学习笔记(ARC,分类,延展)4.10

1.自动释放池autoreleasepool:存入到自动释放池的对象,在自动释放池销毁时,会自动调用池内所有对象的release方法。调用autorelease方法将对象放入自动释放池。 Person *p1 [ [ [ Person alloc ] init ] autorelease]; 2.在类方法里写一个…

机器学习理论入门---线性回归从理论到实践

线性回归是机器学习里面最简单也是最常用的算法,理解了线性回归的推导之后对于后续的学习有很大帮助,所以我决定从这里开始深入学习相关的机器学习模型。 本篇首先从矩阵求导开始切入,然后介绍一次线性回归的推导,再到代码实现。本…

酒店餐厅装水离子雾化壁炉前和装后对比

酒店餐厅装水离子雾化壁炉前和装后的对比可以体现出餐厅氛围和客户体验的显著改变: 装前: 普通的氛围:餐厅可能显得比较普通,缺乏特色或独特的装饰元素。 视觉上缺乏焦点:餐厅空间可能显得相对平淡,缺乏…