hexeditor 复制二进制值_MySQL复制全解析 Part 6 MySQL GTID 生命周期

实验环境

此次实验的环境如下

  • MySQL 5.7.25
  • Redhat 6.10
  • 操作系统账号:mysql
  • 数据库复制账号:repl
  • 复制格式:基于行的复制

180e8e0b29f0ba7c6d57e28a2ee30f48.png

通过前面的介绍我们知道MySQL的复制有两种方法

  • 基于二进制日志文件位置
  • 基于GTID

上一节的内容为GTID的格式和存储,这节根据官方文档我们说GTID的生命周期

1. GTID生命周期

这里以一个事务从主库执行到从库应用的过程来讲解

1.1 主库提交事务被分配GTID

当主库执行和提交一个事务后,该事务会被分配一个GTID(主库uuid和最小的未被使用过的事务号),之后会被写入到二进制日志文件中,其位置在具体事务之前

如果一个事务没有被写入二进制文件,例如被过滤掉或者是只读的,则不会被分配GTID

1.2 主库GTID写入二进制文件

分配GTID后,该GTID会在提交的时候以Gtid_log_event 事件的形式写入二进制日志文件中,其位置在具体事务之前

当日志发生切换或者数据库关闭时该GTID会被写入到mysql.gtid_executed表中

我们可以通过mysqlbinlog命令看出

1ba8016932627c2e75d5916f3817a337.png

1.3 主库写入到GLOBAL.gtid_executed系统变量中

在提交时,还会将该GTID加入到GLOBAL.gtid_executed系统变量中

该变量是个GTID集合,代表目前为止所有被执行过的事务,主要用于复制中

我们也可以同如下命令查看

show master status;

92a31f97680b8e8d2eb5c3e4bad727bb.png

1.4 从库接收主库GTID事务

当二进制日志被传输到备库后,会被储存在relay 日志中,从库会读取该GTID并设置
gtid_next变量为该GTID

这样就告诉备库下一个执行的事务必须为该GTID

需要注意的是该变量是session级别的

1.5 从库应用主库GTID事务

在接收到主库GTID事务并设置好gtid_next后,如果没有其他进程在执行的话,从库执行该GTID事务

如果同时有多个进程执行该事务,则会选择其中一个(如多线程复制)

我们可以查询gtid_owned系统变量来确认

select @@GLOBAL.gtid_owned

353d0a79f287e18219728cae4cd1441b.png

由于该事务已经被主库分配了GTID,所以从库上的该事务不会被分配GTID,而是使用gtid_next变量的值

1.6 从库写入二进制文件日志

由于从库重新执行了来自主库的事务,所以他也会写日志到从库的二进制日志文件中

这里分两种情况

  • 如果从库启用了二进制日志功能,则和1.2步骤一致
  • 如果从库未启用二进制日志功能,则会将gtid和对应的事务语句写入到mysql.gtid_executed表中

需要注意的是如果未开启二进制日志功能MySQL 5.7及之前只有DML操作是原子级别的,DDL并不是,意味着如果MySQL发生异常,数据可能会变得不一致

MySQL 8.0后所有操作都支持

1.7 从库写入到GLOBAL.gtid_executed系统变量中

同样的在提交后,从库也会将该GTID写入到从库的gtid_executed系统变量中

2. 多线程复制

如果启用了多线程复制(slave_parallel_workers > 0),由于是并行执行的GTID事务,每个线程负责不同的GTID,这时gtid_executed变量的值可能会有GAP,系统会自动更新这些值

3. 什么动作会被分配GTID

所有的数据库更改(DML或DDL)都会被分配GTID

数据库的新增删除修改也会被分配GTID

非事务型的修改也会被记录下来,如果在写入过程中发生异常,则会记录一个incident事件

如下操作可能会让一个事务分配多个GTID

  • 一个存储过程包含多个事务
  • drop table语句一次包含多个表
  • CREATE TABLE … SELECT 语句,他会被分配一个create table GTID和一个insert GTID

7. 参考资料

本专题内容翻译自官方文档并结合自己的环境

16.1.3.2 GTID Life Cycle​dev.mysql.com

63c6132732ea94a453a8d7bc1d0dd707.png

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

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

相关文章

Thrift介绍与应用(三)—hbase的thrift接口

原文:http://blog.csdn.net/guxch/article/details/12163047 ----------------------------------------------------------------------------------- 一、概述 Hbase是目前比较火的列存储数据库,由于Hbase是用Java写的,因此它原生地提供了…

Linux/Unix 新手和专家教程

你正在找一些高质量的Linux 和 UNIX 的教程吗?如果是,这篇文章会告诉你到哪去找到这些教程。这里我们将给出超过30个相当的不错的 Linux 和 UNIX 在线的教程。 需要大家注意的是,他们都是英文的,也许有一些也经被翻译到了中文社区…

自动ip的计算机共享打印,局域网内自动获取ip地址怎么设置打印机共享文件夹...

在局域网环境中,为了尽可能地节省办公成本,很多用户都会选择在局域网中架设、部署共享打印机,以便在单位的任何角落处都能方便、自如地进行打印操作。下面是学习啦小编为大家整理的关于局域网内自动获取ip地址怎么设置打印机共享文件夹,一起来看看吧!局域网内自动获…

高级数据分析1代码_用Python进行数据分析,让你一看就会

本书详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。虽然本书的标题是“数据分析”,重点却是Python编程、库,以及用于数据分析的工具。第1章 准备工作第2章 Python语法基础,IPython和Jupyter Notebooks第3章 …

工期日历天计算器_天津实地告诉你:房建项目是怎样保节点,抢工期的?

工程概况天津实地蔷薇花园住宅地块项目共计由24栋单体住宅、2栋配建及地下人防车库组成,其中12层小高层4栋、13层小高层1栋、19栋7层洋房。总建建筑面积为139348.62㎡,地上99348㎡,地下40000㎡,人防面积为14236㎡。工期目标项目施…

thrift介绍及应用(四)—hadoop的thrift接口

原文:http://blog.csdn.net/guxch/article/details/12163519 ----------------------------------------------------------------------------------- 一、概述 hadoop是目前使用比较多的分布式文件系统,由于hadoop是用Java写的,对非Java程…

迟到的年度总结,我们应该收放自如

现在已经2018年3月了,这篇2017的年度总结显得晚了一点,但意义非凡,让我有了更多的反省和思考,我相信大家读完一定会有收获。好了,废话不多说进入主题。别用学习来逃避成长这话说的简直是屁话,不是学习才会成…

测试fps游戏反应速度软件,FPS反应速度提速

静谧无声,生死一瞬,说的就是FPS游戏,没有哪一个种类的游戏可以比拟我们FPS玩家对于反应速度的追求,更快更准哪怕提速只是1毫秒,无数高手之所以为高手就是因为他们可以打出我们看起来不可能完成的击杀,特别是…

html5中单选框被选中把值传给后台_HTML5的表单设计

使用过Delphi的程序员,对Form这个词应该比较熟悉。在Delphi中,Form被翻译为“界面、窗口”,作用是:为用户提供界面,供用户输入信息,向用户展示处理结果。HTML5中也有Form,功能与Delphi中的Form差…

python科赫曲线绘制正方形_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...

目录 Python数据处理从零开始----第四章(可视化)①③多变量绘图 Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图 seaborn.heatmapHeat maps显示数字表格数据,其中单元格根据…

Hive的系统架构

一、架构图 二、各组件 用户接口:包括 CLI(控制台命令),JDBC/ODBC,WebUI。 CLI,即Shell命令行 JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似 WebGUI是通过浏览器访问 Hive --…

8266获取网络时间

8266获取网络时间 今天第一次用阿里的博客写点东西感受一下....sntp.sync("ntp1.aliyun.com",function()print("sync succeeded")end,function(index)print("failed : "..index)end)用的SNTP 然后打印时间 time rtctime.epoch2cal(rtctime.get(…

重庆高考计算机分数线,重庆高考历年分数线

2019年一、普通文理类(一) 文史类本科第一批 545分本科第二批 458分高职专科批 180分(二) 理工类本科第一批 525分本科第二批 435分高职专科批 180分二、艺术类(一)本科批1.美术类 336分2.音乐类(1)音乐学 359分(2)音乐表演(声乐、钢琴、器乐) 275分3.编导类 430分4.影视类(1)表…

坐标不显示_Simpack不显示坐标轴方向的解决方法

经常有用户咨询Simpack软件打开模型时,不能显示坐标轴的x、y、z方向,这个问题对建模有很大的影响。本文是兰州交通大学陈龙同学提供的解决方法,供大家参考。使用Simpack软件建模时,会遇到这种情况:比如要创建标记点时&…

th:text为null报错_为vue3.0的学习TS解读高级类型

知识点摘要本节课主要关键词为: 自动类型推断 / 类型断言 / 类型别名(type) / 映射类型(Pick/Record等...) / 条件类型(extends) / 类型推断(infer)自动类型推断(不用你标类型了,ts自己猜)大家现在写ts的时候一定会在每个变量后面都加上类型吧? 但是?现在告诉大家有些情况下你…

Hive与Hadoop的调用关系

一、调用图 二、步骤解析 1、提交sql 交给驱动 2、驱动编译:解析相关的字段表信息 3、去metastore查询相关的信息 返回字段表信息 4、编译返回信息 发给驱动 5、驱动发送一个执行计划 交给执行引擎 6、执行计划 6.1、DDLs 对数据库表的操作的 直接和metastore交互 …

shell发送邮件函数

#发送邮件函数function send_mail(){ #定义邮件发送列表 maillist( zhengwei.liuxxx xiaogang.yangxxx sundy.shexxx ) #根据不同的函数参数,发送不同的邮件 if [ "$1" "gateway" ];thenfor mail in ${maillist[*]};doecho "无法ping通网…

列主元消去法例题详解_高斯列主元消元法解方程组的步骤

高斯列主元消元法求解线性方程组AXb的简要步骤nnnnnnnnbbbxxxaaaaaaaaa2121212222111211方法说明(以4阶为例):第1步消元——在增广矩阵(A,b)第一列中…

Hive的使用之控制台

启动方式 1、如果将hive的bin(/home/hive2.1/bin)配置了环境变量,则输入:hive。 2、 #hive --service cli 启动 退出方式 1、hive>quit; 2、ctrlc 实例 ---------hivesql兼容大部分sql------- hive>show tables; hiv…

简述计算机文件的命名办法,如何进行文件命名-如何进行文件管理

如何进行文件命名-如何进行文件管理电脑的管理事实上就是文件和文件夹的管理。想要我们的电脑干净整齐,就需要我们正确的进行文件管理。我们知道了文件和文件夹的概念之后,现在我们再来看看单独的文件,认识一下文件的构成以及文件命名和命名规…