GTID(global transaction identifier)是对于一个已提交事务的全局唯一编号,前一部分是server_uuid,后面一部分是执行事务的唯一标志,通常是自增的。

下表整理了GTID常用的查看命令,以及变量的描述及原理,供大家参考(以下基于MySQL5.7,对于MySQL5.6的GTID由于存在性能问题,不推荐使用)

角色

常用查看GTID的相关命令

变量示例

描述

变量的更新时机

master

show global variables like '%gtid%';

gtid_mode=ON

GTID模式,开启GTID时在配置文件中开启

gtid_mode参数的4种选项

1> GTID_MODE = OFF : 不产生Normal_GTID,只接受来自master的ANONYMOUS_GTID

2> GTID_MODE = OFF_PERMISSIVE : 不产生Normal_GTID,可以接受来自master的ANONYMOUS_GTID & Normal_GTID

3> GTID_MODE = ON_PERMISSIVE : 产生Normal_GTID,可以接受来自master的ANONYMOUS_GTID & Normal_GTID

4> GTID_MODE = ON : 产生Normal_GTID,只接受来自master的Normal_GTID

在my.cnf配置中指定,或者online可以通过下面修改

SET @@GLOBAL.GTID_MODE=

SET GLOBAL GTID_MODE=

enforce_gtid_consistency=ON

保证GTID安全的参数,开启GTID时在配置文件中开启

ENFORCE_GTID_CONSISTENCY参数的3种选项

1> OFF:所有事务允许违反gtid一致性。

2> ON:没有事务允许违反gtid一致性。

3> WARN:所有事务允许违反gtid一致性,但一个警告会产生,Mysql5.7.6新增。

在my.cnf配置中指定,或者online可以通过下面修改

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=

SET GLOBAL ENFORCE_GTID_CONSISTENCY=

gtid_executed=

06ae7c12-fe57-11e6-b021-883fd32565d6:1-4792038936,

14361082-83ae-11e8-8328-883fd32565d6:1-1051075034

执行过的所有GTID集合

ordered_commit flush阶段生成GTID,在commit阶段才计入gtid_executed变量,在内存中实时更新

gtid_purged=

06ae7c12-fe57-11e6-b021-883fd32565d6:1-4792038936,

14361082-83ae-11e8-8328-883fd32565d6:1-1045677424

由于binlog文件的删除(如purge binary logfiles或者超过expire_logs_days设置)已经丢失的GTID事务,同时在搭建从库时使用set global gtid_purged变量来标识哪些GTID事务已经执行过了。

在MySQL触发清理binlog的情况下,比如purge binary logs to或者超过参数expire_logs_days设置的天数后自动删除,需要将丢失的GTID计入这个变量中

gtid_owned=

14361082-83ae-11e8-8328-883fd32565d6:1049600466#997780200

分配GTID发生在GROUP COMMIT的第一个阶段,也就是flush stage,大概可以描述为:

1、事务过程中,碰到第一条DML语句需要记录Binlog时,分配一段Gtid事件的cache,但不分配实际的GTID

2、事务完成后,进入commit阶段,分配一个GTID并写入Step1预留的Gtid事件中,该GTID必须保证不在gtid_owned集合和gtid_executed集合中。 分配的GTID随后被加入到gtid_owned集合中。

3、将Binlog 从线程cache中刷到Binlog文件中。

4、将GTID加入到gtid_executed集合中。

5、在完成sync stage 和commit stage后,各个会话将其使用的GTID从gtid_owned中移除。

master

show global variables like '%uuid%';

server_uuid=14361082-83ae-11e8-8328-883fd32565d6

server_uuid实际上是一个32字节+1字节(/0)的字符串。

MySQL启动的时候会调用init_server_auto_options() 读取auto.cnf文件。如果没有读取到则调用generate_server_uuid()调用生成一个server_id。

master

select * from mysql.gtid_executed;

source_uuid=14361082-83ae-11e8-8328-883fd32565d6

uuid of the source where the transaction was originally executed.

gtid_executed表是5.7.5以后新增的,是GTID持久化的介质,实例重启后读取这个表初始化。

1、从库在binlog关闭或者binlog开启,参数log_slave_updates关闭的情况,实时将GTID持久化到gtid_executed表中。

2、从库在binlog开启同时参数log_slave_updates开启的情况,不实时更新

3、主库不实时更新。

4、执行reset master时,清空表

5、set global gtid_purged时,设置表

interval_start=1

First number of interval

同上

interval_end=1053828634

Last number of interval

同上

master

show master status\G

Executed_Gtid_Set=

06ae7c12-fe57-11e6-b021-883fd32565d6:1-4792038936,

14361082-83ae-11e8-8328-883fd32565d6:1-1054196743

执行过的所有GTID集合

同gtid_executed

master

Mysqlbinlog -vvv SVR14077HW2288-bin.030734|less

Previous-GTIDs=

# 14361082-83ae-11e8-8328-883fd32565d6:1-1055704939,

#e36c6adf-fe56-11e6-9f8e-883fd325654a:74434853-7475373424

Previous gtid Event是包含在每一个binlog的开头用于描述所有以前binlog所包含的全部Gtid的一个集合

(包括已经删除的binlog)

产生的binlog中开头会包含这个值

在5.7中不开启GTID也会包含这个Previous gtid Event

slave

show slave status\G

Master_UUID: 14361082-83ae-11e8-8328-883fd32565d6

对应master的server_uuid

Retrieved_Gtid_Set:14361082-83ae-11e8-8328-883fd32565d6:962977557-1057333221

IO线程已经读取的GTID的集合

1、IO线程收到一个GTID EVENT就会把它加入到Retrieved_Gtid_Set中

2、MySQL重启时会从relay log中初始化Retrieved_Gtid_Set

Executed_Gtid_Set:06ae7c12-fe57-11e6-b021-883fd32565d6:1-4792038936,

14361082-83ae-11e8-8328-883fd32565d6:1-1057333220

表示SQL线程已经执行的GTID的集合

主库的binlog在从库应用时,会更新Executed_Gtid_Set值

MySQL5.7 GTID学习笔记的更多相关文章

  1. MySQL5.7 GTID学习笔记,[MySQL 5.6] GTID实现、运维变化及存在的bug

      GTID(global transaction identifier)是对于一个已提交事务的全局唯一编号,前一部分是server_uuid,后面一部分是执行事务的唯一标志,通常是自增的. 下表整理 ...

  2. 【工作笔记】BAT批处理学习笔记与示例

    BAT批处理学习笔记 一.批注里定义:批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD,这些命令统称批处理命令. 二.常见的批处理指令: 命令清单: 1.RE ...

  3. Android学习笔记(二)——探究一个活动

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一 ...

  4. linux前四天学习笔记

    以下是在linux培训机构所学的内容,感觉比较乱 MySQL学习笔记MySQL的安装 linux中的超级管理员rootaixocm vnc的退出: F8 MySQL的特点.优点:关系型开源.免费c++ ...

  5. 高性能MySQL--索引学习笔记(原创)

    看过一些人写的学习笔记,完全按书一字不漏照抄,内容很多,真不能叫笔记.遂自己整理了一份,取其精要. 更多笔记请访问@个人简书 [toc] 索引概述 索引即key 在存储引擎层实现,不同引擎工作方式不同 ...

  6. MySQL学习笔记Windows篇<一> Welcome to MySQL

    MySQL安装完毕后没有图形化操作界面,图形化管理界面需要另行安装,个人比较喜欢Navicat,界面更像SQLserver: 此篇学习笔记所有操作均使用命令行中完成: 1.开启/停止服务 使用MySQ ...

  7. MySQL学习笔记-数据库文件

    数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...

  8. JAVA中 XML与数据库互转 学习笔记三

    要求 必备知识 JAVA基础知识,XML基础知识,数据库的基本操作. 开发环境 MyEclipse10/MySql5.5 资料下载 源码下载   数据库在数据查询,修改,保存,安全等方面与其他数据处理 ...

  9. php入门学习笔记

    学习笔记[6.5-6.13] 1.常用命令 打开数据库格式: mysql -h主机地址 -u用户名 -p 重启nginx:sudo /etc/init.d/nginx restart或者service ...

随机推荐

  1. Python工资高还是Java?

    说起来,随着人工智能和大数据逐渐进入人们的眼中,越来越多的人看到互联网未来大好发展趋势,而想要学习一门技术来进入其中,以期分一杯羹.但是,作为人工智能和大数据的重要编程语言,Python和Java,该 ...

  2. kafka消费者实时消费数据存入hdfs java scalca 代码

    hadoop-client依赖很乱 调试很多次cdh版本好多jar没有 用hadoop2.7.3可以 自定义输出流的池子进行流管理 public void writeLog2HDFS(String p ...

  3. 《CSS世界》读书笔记(七)

    <!-- <CSS世界> 张鑫旭著 --> 替换元素 根据是否具有可替换内容,我们可以把元素分为替换元素和非替换元素. <img>.<object>.& ...

  4. Linux:command not found

    最近老是遇到command not found 这个问题,然后就上网查到什么文件底下export什么变量啊.后来次数多了,发现不对劲.后来上网查了一下,原来切换到root用户要使用su -,而不是su ...

  5. 关于mysql触发器和存储过程的理解

    内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...

  6. flutter key

    随意点开一个Widget,就会发现,可以传递一个参数Key.那这个Key到底是干啥子,有什么用呢? Flutter是受React启发的,所以Virtual Dom的diff算法也参考过来了(应该是略有 ...

  7. nginx-高并发配置 第七章

    一 .nginx 服务配置优化: 1.nginx进程数,建议按照cpu数目来指定,一般为它的倍数.worker_processes 定义了nginx对外提供web服务时的worker进程数.最优值取决 ...

  8. img 兼容问题 css图片与图片之间总是会存在缝隙

    解决方案: 法宝一:定义图片img标签vertical-align:bottom,vertical-align:middle,vertical-align:top. img{vertical-alig ...

  9. Java 运行时字符编码与解码

    以下仅为个人学习的记录,如有疏漏不妥之处,还请不吝赐教. Java在运行时字符char采用UTF-16进行编码. public class RuntimeEncoding { public stati ...

  10. SOAPdenovo组装软件使用记录

    背景: 1.为什么要从头测序组装基因组? 基因组是不同表型的遗传基础:获得参考基因组是深入研究一个生物体全基因组的第一步也是必须的一步:从头测序组装能够对新的测序物种构建参考基因组: 2.为什么要研究 ...