返回顶部
首页 > 资讯 > 数据库 >说GTID - 与GTID相关的系统变量
  • 656
分享到

说GTID - 与GTID相关的系统变量

2024-04-02 19:04:59 656人浏览 泡泡鱼
摘要

gtid_next默认事务提交时,Mysql会为其生成一个GTID。当事务在Slave节点上回放时,使用的却是该事务在Master节点上产生的GTID,究其缘由和一个会话级系统变量gtid_next有关。若

gtid_next


默认事务提交时,Mysql会为其生成一个GTID。当事务在Slave节点上回放时,使用的却是该事务在Master节点上产生的GTID,究其缘由和一个会话级系统变量gtid_next有关。


若gtid_next的值为AUTOMATIC(其默认值),当启用二进制日志,无论在Slave节点还是Master节点上,事务提交都会产生新的GTID。但若将gtid_next赋值一个有效的GTID,那么该GTID就是接下来提交的事务的GTID,同时该GTID会被添加到GTID集合gtid_executed。Slave节点上的回放线程正式利用了这一点,把在Master节点上生成的GTID赋值给@@SESSioN.gtid_next,继而将此GTID原封不动的保存在了Slave节点上。



gtid_purged


全局系统变量gtid_purged代表了所有已经提交了,但在二进制日志中又清除掉了的事务的GTID集合。


全局系统变量gtid_purged是gtid_executed的子集合,如下情形会引起gtid_purged集合的变化:

·Slave节点上禁用了二进制日志,随着回放线程提交复制过来的事务,gtid_purged会发生变化。

·二进制日志文件被清除时,gtid_purged会发生变化。

·@@GLOBAL.gtid_purged被赋值时,gtid_purged会发生变化。


可以通过改变gtid_purged集合,来表明该事务已提交了,但在二进制日志文件中被清除掉了。当向gtid_purged集合添加GTID时,同时也会向gtid_executed集合添加此GTID。通过备份增加一个只读实例,正是利用的该思路。在mysql 5.7版本,只能在gtid_executed集合为空时,才能设置gtid_purged。



每个二进制日志文件头部都记录了一个Previous_gtids_log_event事件,它代表了该二进制日志文件之前所有二进制日志文件中GTID的集合(即,第N个二进制日志文件中的Previous_gtids_log_event,等于第N-1个二进制日志文件中的Previous_gtids_log_event,和第N-1的文件中所有Gtid_log_event的并集)。


gtid_executed和gtid_purged这两个全局系统变量,在Mysql启动时就是通过最老的,和最新的二进制日志文件中的Previous_gtids_log_event和Gtid_log_event被初始化的。


gtid_executed集合被初始化的过程如下:


gtid_executed = 最新的二进制日志文件中的Previous_gtids_log_event + 最新的二进制日志文件中所有的Gtid_log_event + 系统表mysql.gtid_executed中的GTID(但该GTID集合不包含正在执行着的GTID,即@@GLOBAL.gtid_owned)。



gtid_purged集合被初始化的思路是这样的:


第一个等式:

现存(存在)的二进制日志文件中的GTID,和被清除掉的二进制日志文件中的GTID的并集,即gtids_in_binlog。


gtids_in_binlog = 最新的二进制日志文件中的Previous_gtids_log_event + 最新的二进制日志文件中所有的Gtid_log_event


第二个等式:

现存(存在)的二进制日志文件中的GTID,即gtids_in_binlog_not_purged。


gtids_in_binlog_not_purged = gtids_in_binlog - 最老的二进制日志文件中的Previous_gtids_log_event


第三个等式:

曾经出现过,但现在已不存在于二进制日志文件中的GTID,即gtid_purged。


gtid_purged = gtid_executed - gtids_in_binlog_not_purged



通过这3个等式可得到:

gtid_purged = gtid_executed - gtids_in_binlog_not_purged = 最新的二进制日志文件中的Previous_gtids_log_event + 最新的二进制日志文件中所有的Gtid_log_event + 系统表mysql.gtid_executed中的GTID - ((最新的二进制日志文件中的Previous_gtids_log_event + 最新的二进制日志文件中所有的Gtid_log_event) - 最老的二进制日志文件中的Previous_gtids_log_event)


即,gtid_purged = 系统表mysql.gtid_executed中的GTID + 最老的二进制日志文件中的Previous_gtids_log_event



与上边两个全局系统变量初始化相关的一个系统参数是binlog_gtid_simple_recovery,若其值为FALSE,在初始化该两个变量时,MySQL会遍历所有的二进制日志文件,而不仅是最老的,和最新的二进制日志文件,此过程可能会花费较长的时间。

您可能感兴趣的文档:

--结束END--

本文标题: 说GTID - 与GTID相关的系统变量

本文链接: https://lsjlt.com/news/36503.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 说GTID - 与GTID相关的系统变量
    gtid_next默认事务提交时,MySQL会为其生成一个GTID。当事务在Slave节点上回放时,使用的却是该事务在Master节点上产生的GTID,究其缘由和一个会话级系统变量gtid_next有关。若...
    99+
    2024-04-02
  • 说GTID - 与GTID相关的4个基本函数和使用场景
    4个基本函数1. GTID_SUBSET(set1,set2) - 若在set1中的GTID,也在set2中,返回true,否则返回false(set1是set2的子集)。[root@mysql.sock]...
    99+
    2024-04-02
  • mysql字符集相关系统变量
    这期内容当中小编将会给大家带来有关mysql字符集相关系统变量,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 character_set_s...
    99+
    2024-04-02
  • MySQL5.7 传统复制和GTID复制间的在线互相切换
    一、传统复制切换为GTID复制主/从库执行1.SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;持续观察MySQL错误日志一段时间,看是否有违反gtid 一致性的报错...
    99+
    2024-04-02
  • MySQL 中的系统变量与局部变量?
    局部变量的作用域仅限于一组语句或语句块。每当一组语句或语句块完成时,局部变量就会超出范围。例如局部变量可以在存储过程、函数等中使用.与DECLARE关键字一起使用。局部变量的语法如下。DECLARE yourVariableName dat...
    99+
    2023-10-22
  • mysql死锁deadlock相关几个系统变量innodb_lock_wait_timeout是怎样的
    这篇文章将为大家详细讲解有关mysql死锁deadlock相关几个系统变量innodb_lock_wait_timeout是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相...
    99+
    2024-04-02
  • Mysql系统变量与状态变量详细介绍
    目录系统变量什么是mysql系统变量设置系统变量my.cnf设置配置启动项配置Set的形式修改系统变量SESSION作用范围语法GLOBAL作用范围语法查看系统变量值系统变量注意点并不是所有的系统变量都有session范...
    99+
    2024-04-02
  • 总结Python变量的相关知识
    一、变量的定义 程序中,数据都是临时存储在内存中,为了更快速的查找或使用这个数据,通常我们把这个数据在内存中存储之后,给整个数据定义一个名称,这个名称就是变量。 变量就是在存储数据...
    99+
    2024-04-02
  • 5G与WiFi6相爱相杀的关系
           近半年来,5G网络的消息层出不穷。5G商用牌照正式发放,三大运营商表示要在今年年底前至少覆盖40个城市,最新的中国5G网络招标结果等。在人们对5G展示最大热情的时候,WiFi6横空出世。...
    99+
    2023-06-03
  • Postgresql性能相关操作系统及数据库说明
    本篇内容主要讲解“Postgresql性能相关操作系统及数据库说明”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Postgresql性能相关操作系统及数据库说明...
    99+
    2024-04-02
  • 操作系统与物联网的邂逅:相爱相杀的微妙关系
    随着物联网的快速发展,操作系统在物联网中的作用也变得越来越重要。操作系统作为物联网设备的软件核心,为其提供基本的资源管理、进程管理、文件管理、内存管理和网络管理等服务,是物联网设备正常运行的基础。 物联网设备种类繁多,应用场景各异,对操...
    99+
    2024-02-23
    操作系统 物联网 软件 硬件 嵌入式系统
  • ECSHOP模板系统变量调节标签使用说明
    ECSHOP作为国内使用最多的网上商城系统,却没有一个很好的API手册,着实比较让我们费心,要想查找一个函数的功能,只能通过查看其程序的源代码才可以知道有什么功能,官方的手册也不全面,很多东西都没有编写完成,可能作者已经...
    99+
    2022-06-12
    ECSHOP 变量调节
  • Hive与传统关系型数据库相比
    Hive和传统关系型数据库在很多方面有着明显的区别,以下是它们之间的一些比较: 数据存储方式: 传统关系型数据库使用表格形式存...
    99+
    2024-03-11
    Hive
  • 操作系统虚拟化与云计算:探索其相辅相成的关系
    操作系统虚拟化 操作系统虚拟化是一种通过软件将一台物理服务器划分为多个虚拟机的技术。每个虚拟机都可以运行自己的操作系统和应用程序,就像它们在物理服务器上一样。这允许在单一物理系统上运行多个应用程序,从而提高资源利用率并降低成本。 云计算 ...
    99+
    2024-04-02
  • R语言两组变量特征相关关系热图绘制画法
    目录准备数据简单热图只对列进行聚类将相关系数显示在图上在图上加上显著性标记准备数据 两组变量的数据可以像下面这样处理,分别保存在两个csv文件中。 > # 导入数据及数据预处理...
    99+
    2024-04-02
  • Python基础之变量的相关知识总结
    变量全都是引用 跟其他编程语言不同,Python的变量不是盒子,不会存储数据,它们只是引用,就像标签一样,贴在对象上面。 比如: >>> a = [1, 2, ...
    99+
    2024-04-02
  • javascript变量提升的相关知识有哪些
    这篇文章将为大家详细讲解有关javascript变量提升的相关知识有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。咱们先看段代码,你觉得下面这段代码输出的结果是什么?...
    99+
    2024-04-02
  • 浅谈Linux环境变量与系统编程
    目录1、基本概念:2、环境变量的操作:(1)、对于环境变量的基本操作命令如下:(2)、如何使得修改长期有效,并且不会覆盖原有路径?3、环境变量与环境表:4、如何用函数来对环境变量修改?1、基本概念: 环境变量(envir...
    99+
    2023-05-06
    Linux环境变量 Linux系统编程
  • CentOS系统中与时间相关命令的示例分析
    小编给大家分享一下CentOS系统中与时间相关命令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!时间在任何系统里都是最基本的部分,必不可少。本文介绍Ce...
    99+
    2023-06-10
  • 浅谈Python从全局与局部变量到装饰器的相关知识
    全局变量与局部变量 # num1是全局变量 num1 = 1 # num2是局部变量 def func(): num2 = 2 在函数外(且不在函数里)定义的变量是全局变量...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作