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. Spring Boot IoC 容器初始化过程

    1. 加载 ApplicationContextInializer & ApplicationListener 2. 初始化环境 ConfigurableEnvironment & 加 ...

  2. YII1 增、删、改、查数据库操作

    增 //注意插入的时候 是用的new Post $objectPost = new Post; $objectPost->username = $username; $objectPost-&g ...

  3. CSS 文件引入

    CSS 文件引入 <html> <head> <!-- link标签引用其他文件.rel="stylesheet" 引用css.href=" ...

  4. Linux 查看磁盘使用情况

    Linux 查看磁盘使用情况 df 查看当前挂载空间使用情况 语法: df [选项]... [FILE]... 文件-a, --all 包含所有的具有 0 Blocks 的文件系统 文件--block ...

  5. UI自动化(十)selenium定位

    浏览器操作   1 2 3 4 5 6 7 8 # 刷新 driver.refresh()   # 前进 driver.forward()   # 后退 driver.back() 获取标签元素   ...

  6. gcc、make编译

    一 arm-linux-gcc 常用参数 https://www.cnblogs.com/zhangpengshou/p/3587751.html 二 arm-linux-objdump常用参数 ht ...

  7. 结构体(struct)

    结构体 结构体是将不同类型的数据按照一定的功能需求进行整体封装,封装的数据类型与大小均可以由用户指定. 1 结构体的声明.定义及初始化 1.1 声明结构体类型 struct 结构体名 { 成员列表: ...

  8. 【Python64-tkinter_label组件】

    一.label组件用于在屏幕上显示文本活图像,Label组件仅能显示单一字体的文本,单文本可以跨越多行.另外还可以为其中的个别字符加上下划线 二.如何使用label组件 使用label组件,你可以指定 ...

  9. yum downloadonly模式,保存所需软件及其依赖包

    command: sudo yum install --downloadonly --downloaddir='yourderictory'

  10. loadrunner中面向目标场景的设计

    在一个面向目标的方案中,可以定义五种类型的目标:虚拟用户数.每秒点击次数(仅 Web Vuser).每秒事务数.每分钟页面数(仅 Web Vuser)或方案的事务响应时间.使用“编辑方案目标”对话框可 ...