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(python学习路线图)

    现在互联网巨头,都已经转投到人工智能领域,而人工智能最好的编程语言就是python,未来前景显而易见.这是小编给大家整理的python学习路线图,按照此教程一步步的学习来,肯定会对python有更深刻 ...

  2. Docker Kubernetes 命令行创建容器

    Docker Kubernetes 命令行创建容器 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...

  3. Python 缓存服务

    缓存服务:mongodb.redis.memcache mongodb:早期的缓存系统,直接持久话,数据即存内存也同步到硬盘. redis:主流缓存系统,半持久化,默认存在内存,需要手动调用存在硬盘, ...

  4. 【python游戏编程04--加载位图与常用的数学函数】

    一.pygame中常用的数学函数 首先介绍两个角度和弧度转换的函数 math.degress()和math.radians()用法很简单,只要将数值传进去然后接受返回值就可以 math.cos(ang ...

  5. Windows Update Medic Service 拒绝访问

    修改注册表:HEKY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc 中Start的值改为4.

  6. 论文笔记:Visual Question Answering as a Meta Learning Task

    Visual Question Answering as a Meta Learning Task ECCV 2018 2018-09-13 19:58:08 Paper: http://openac ...

  7. CSS常用伪类

    css伪类 :after 在元素后面插入内容 :hover 鼠标移入时进行 :before 在元素前面插入内容 :link 未选中的链接 :active 点击后产生什么变化 :nth-child 匹配 ...

  8. MapReduce编程:词频统计

    首先在项目的src文件中需要加入以下文件,log4j的内容为: log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j ...

  9. Linux修改磁盘挂载目录

    比如想把已经挂载在home目录上的硬盘挂载到data目录上, 如下操作 #df -h(查看分区情况及数据盘名称) # mkdir /data(如果没有data目录就创建,否则此步跳过) # umoun ...

  10. 【四】jquery之文档处理习题(内部处理、外部处理)[移动节点]

    参考资料:http://jquery.cuishifeng.cn/index.html 代码: <!DOCTYPE html> <html> <head> < ...