返回顶部
首页 > 资讯 > 数据库 >说GTID - GTID的组成和存储
  • 215
分享到

说GTID - GTID的组成和存储

2024-04-02 19:04:59 215人浏览 薄情痞子
摘要

GTID是什么GTID(Global Transaction Identifier)是事务在第一次提交时获取到的唯一标识,该标识在整个的复制拓扑中具有唯一性。GTID组成GTID = source_id:t

GTID是什么


GTID(Global Transaction Identifier)是事务在第一次提交时获取到的唯一标识,该标识在整个的复制拓扑中具有唯一性。



GTID组成


GTID = source_id:transaction_id(c4e5d4a0-a9be-11e9-b444-080027f22add:7)


直观看,GTID有两部分组成,source_id和transaction_id。source_id代表事务提交时所在的Master实例,一般是由该实例的全局系统变量server_uuid表示;transaction_id代表事务在该实例上提交的顺序,其为大于或等于1的正向递增序列。



GTID集合


集合,是由一个或多个确定的元素所构成的整体。GTID集合,顾名思义,这其中的元素就是GTID,由单个,或多个GTID,又或由一个范围的GTID组成。如,3E11FA47-71CA-11E1-9E33-C80AA9429562:1-3:11:47-49。在实例中全局系统变量gtid_executed和gtid_purged往往存储的就是GTID集合。


GTID集合也是有格式的,如下:


gtid_set:

    uuid_set [, uuid_set] ...

    | ''


uuid_set:

    uuid:interval[:interval]...


uuid:

    hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh


h:

    [0-9|A-F]


interval:

    n[-n]


    (n >= 1)



GTID存储


GTID是存储在系统表Mysql.gtid_executed中的,该表一行记录代表单个GTID,或GTID集合。


+--------------------------------------+----------------+--------------+

| source_uuid                          | interval_start | interval_end |

+--------------------------------------+----------------+--------------+

| aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa |              1 |           72 |

| c4e5d4a0-a9be-11e9-b444-080027f22add |         101005 |       188707 |

+--------------------------------------+----------------+--------------+


GTID何时被写入mysql.gtid_executed表呢…,这取决于二进制日志是否开启。


  • 当禁用二进制日志时(该情况一般出现在Slave上),Mysql在执行(回放)完GTID(事务)后,同时将该GTID写入mysql.gtid_executed表。在5.7版本中,对于DML语句,该过程是原子性的,但对于DDL语句不是原子性的(在8.0版本中,DML和DDL语句都是原子性的了。)。


  • 当开启二进制日志时,在二进制日志轮换,或实例关闭时,MySQL会将之前二进制日志中全部GTID写入mysql.gtid_executed表。若MySQL意外关闭了,在恢复(recovery)阶段,没写入的GTID会再次被写入mysql.gtid_executed(当然关闭了二进制日志,恢复时,没写入的GTID是不能恢复的,之后复制也是无法继续的)。


不难看出启用二进制日志时,mysql.gtid_executed表中的GTID不能代表全部的事务,该信息则是由全局系统变量@@GLOBAL.gtid_executed提供的。


[root@mysql.sock][(none)]> select * from mysql.gtid_executed;

+--------------------------------------+----------------+--------------+

| source_uuid                          | interval_start | interval_end |

+--------------------------------------+----------------+--------------+

| aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa |              1 |           72 |

| c4e5d4a0-a9be-11e9-b444-080027f22add |         101005 |       188707 |

+--------------------------------------+----------------+--------------+

4 rows in set (0.00 sec)


[root@mysql.sock][(none)]> select @@global.gtid_executed;

+-----------------------------------------------------------------------

| @@global.gtid_executed                                               |

+-----------------------------------------------------------------------

| aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-76:,

c4e5d4a0-a9be-11e9-b444-080027f22add:101005-338847 |

+-----------------------------------------------------------------------

1 row in set (0.00 sec)



注意,reset master会将mysql.gtid_executed表清空。


[root@mysql.sock][(none)]> select * from mysql.gtid_executed;

+--------------------------------------+----------------+--------------+

| source_uuid                          | interval_start | interval_end |

+--------------------------------------+----------------+--------------+

| c4e5d4a0-a9be-11e9-b444-080027f22add |              1 |       188708 |

+--------------------------------------+----------------+--------------+

1 row in set (0.00 sec)


[root@mysql.sock][(none)]> select @@global.gtid_executed;

+-----------------------------------------------+

| @@global.gtid_executed                        |

+-----------------------------------------------+

| c4e5d4a0-a9be-11e9-b444-080027f22add:1-888712 |

+-----------------------------------------------+

1 row in set (0.00 sec)


[root@mysql.sock][(none)]> select @@global.gtid_purged;

+-----------------------------------------------+

| @@global.gtid_purged                          |

+-----------------------------------------------+

| c4e5d4a0-a9be-11e9-b444-080027f22add:1-101004 |

+-----------------------------------------------+

1 row in set (0.00 sec)


[root@mysql.sock][(none)]> reset master;

Query OK, 0 rows affected (0.04 sec)


[root@mysql.sock][(none)]> select * from mysql.gtid_executed;

Empty set (0.00 sec)


[root@mysql.sock][(none)]> select @@global.gtid_executed;

+------------------------+

| @@global.gtid_executed |

+------------------------+

|                        |

+------------------------+

1 row in set (0.00 sec)


[root@mysql.sock][(none)]> select @@global.gtid_purged;

+----------------------+

| @@global.gtid_purged |

+----------------------+

|                      |

+----------------------+

1 row in set (0.00 sec)

您可能感兴趣的文档:

--结束END--

本文标题: 说GTID - GTID的组成和存储

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

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

猜你喜欢
  • 说GTID - GTID的组成和存储
    GTID是什么GTID(Global Transaction Identifier)是事务在第一次提交时获取到的唯一标识,该标识在整个的复制拓扑中具有唯一性。GTID组成GTID = source_id:t...
    99+
    2024-04-02
  • 说GTID - GTID的生命周期
    1.事务提交时会获取到一个GTID,该GTID将位于事务前面一同被记录到二进制日志中。若事务不被记录到二进制日志中,它也不会获取到GTID。2.事务的GTID会以Gtid_log_event的形式记录到二进...
    99+
    2024-04-02
  • 说GTID - 清除GTID的执行历史
    RESET MASTER可以用来清除GTID的执行历史。如果想将一个执行过本地事务的节点,加入到Group Replication中,就要执行下RESET MASTER。执行RESET MASTER会带来以...
    99+
    2024-04-02
  • 说GTID - GTID-based复制中的限制
    同一个事务(语句)中,不能同时涉及事务和非事务数据表的变更,这会导致一个事务对应多个GTID,违反了事务与GTID的一对一对应原则。[root@mysql.sock][db1]> show creat...
    99+
    2024-04-02
  • 说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 5.7中Gtid和Last_commt/sequnce_number的生成时机是什么
    本篇内容主要讲解“Mysql 5.7中Gtid和Last_commt/sequnce_number的生成时机是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“...
    99+
    2024-04-02
  • docker下MySQL8基于GTID的主从复制如何完成部署
    本文主要给大家介绍docker下MySQL8基于GTID的主从复制如何完成部署,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下docker下MySQL...
    99+
    2024-04-02
  • HBase和MySQL存储方式的差别?或者说是,行存储和列存储的区别?
    HBase借鉴列存储的思想,但是最底层依然是依靠键值对来存储数据,HBase为非关系型数据库 而MySQL则是行存储,MySQL为关系型数据库 写过程 行存储因为数据是连续的,所以只需要进行追加即可; 列存储因为数据不连续,所以需要不断...
    99+
    2020-03-15
    HBase和MySQL存储方式的差别?或者说是,行存储和列存储的区别?
  • 如何理解MySQL中GTID和自增列的数据测试
    今天就跟大家聊聊有关如何理解MySQL中GTID和自增列的数据测试,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。   昨天的一篇文章,今...
    99+
    2024-04-02
  • MySQL中GTID的几个限制和解决方案是怎样的
    本篇文章给大家分享的是有关MySQL中GTID的几个限制和解决方案是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  &nb...
    99+
    2024-04-02
  • MySQL5.7 传统复制和GTID复制间的在线互相切换
    一、传统复制切换为GTID复制主/从库执行1.SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;持续观察MySQL错误日志一段时间,看是否有违反gtid 一致性的报错...
    99+
    2024-04-02
  • 如何分析基于GTID的一主两从和主从切换
    这期内容当中小编将会给大家带来有关如何分析基于GTID的一主两从和主从切换,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 故障描述:一主两从...
    99+
    2024-04-02
  • MySQL:组成部分、执行流程和存储引擎
    一、基本信息 MySQL 是关系型数据库管理系统,是典型的 C/S 架构(Client/Server 架构),服务器程序使用的是 mysqld。 二、组成部分:连接层、SQL 层、存储引擎层 连接层:客户端和服务器端建立连接,客户端发...
    99+
    2018-01-24
    MySQL:组成部分 执行流程和存储引擎
  • vuex中store存储store.commit和store.dispatch的区别及说明
    目录store存储store.commit和store.dispatch区别主要区别vuex store原理及使用指南使用安装示例需求场景源码目录结构store组件初始化store存...
    99+
    2024-04-02
  • MySQL的存储引擎与日志说明
    MySQL的存储引擎与日志说明   1.1 存储引擎的介绍   1.1.1 文件系统存储   文件系统:操作系统组织和存取数据的一种机制。文件系统是一种软件。 ...
    99+
    2022-11-30
    mysql 存储 引擎
  • 服务器主存储器的组成部分有哪些
    这篇文章主要讲解了“服务器主存储器的组成部分有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“服务器主存储器的组成部分有哪些”吧!主存储器是计算机硬件的一个重要部件,主要由存储体、控制线路...
    99+
    2023-06-26
  • JS中localStorage存储对象和sessionStorage存储数组对象的示例分析
    小编给大家分享一下JS中localStorage存储对象和sessionStorage存储数组对象的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、前言最近在用angular做商...
    99+
    2024-04-02
  • go path 和大数据存储:如何在存储方面取得成功?
    Go Path 和大数据存储:如何在存储方面取得成功? 在当今数据驱动的时代,数据存储是任何成功企业的核心部分。对于大规模数据存储和处理,Go语言是一个强大的选择。Go语言的包管理系统——Go Path,可以帮助我们更好地组织代码,使得开发...
    99+
    2023-10-01
    path 大数据 存储
  • mysql数组存储的步骤
    下文主要给大家带来mysql数组存储的步骤,希望这些内容能够带给大家实际用处,这也是我编辑mysql数组存储的步骤这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。    &nbs...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作