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. 2017-2018-2 20155303『网络对抗技术』Exp2:后门原理与实践

    2017-2018-2 『网络对抗技术』Exp2:后门原理与实践 --------CONTENTS-------- 1. 后门原理与实践实验说明 2. 常用后门工具 NC或netcat Win获得Li ...

  2. SD卡与FAT32系统学习

    2011-06-06 23:04 前2天,我了解了一下SD卡驱动的原理及FAT32文件系统的结构.接着准备主要已移植为主.通过LCD显示SD卡中的图片.但我需要分步进行. 0,使sd卡能读写数据.1, ...

  3. nodejs笔记之搭建服务器

    简单服务器搭建: 1.新建一个文件:app.js 2.加入实现服务器代码: const http = require("http"); http.createServer(func ...

  4. 2、Kafka架构

    Kafka架构图 1)Producer :消息生产者,就是向kafka broker发消息的客户端. 2)Consumer :消息消费者,向kafka broker取消息的客户端 3)Topic :可 ...

  5. Linux 高级文件管理

    1.标准输出(ls -l /dev/stdin 0 ),标准输入(ls -l /dev/stdout 1 ),错误输出(ls -l /dev/stderr 2 ). 2.ls /etc/passwd  ...

  6. Linux 系统状态、常用快捷键

    1.查看系统状态 ()df -h #查看分区状态. ()mount #查看文件系统类型. ()du -h -max-depth= 目录名 #查看目录文件大小,批量查找. ()du -sh #查看目录文 ...

  7. container(容器),injection(注入)

    1.container为什么会出现? 在书写程序的时候,我们常常需要对大量的对象引用进行管理.为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中.由于数据容器中存放了我们随时可能需要使用 ...

  8. Globecom 2018 投稿过程

    Globecom 2018 投稿过程 IEEE 通信领域旗舰型会议 Globecom 2018 将于近日提交 Camera-Ready 稿件.回顾今年投稿过程,虽麻烦不断但也不算特别曲折,本篇随笔记录 ...

  9. Java内存可见性

    如果一个线程对共享变量的修改,能够被其它线程看到,那么就能说明共享变量在线程之间是可见的.如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量.Java内存模型(Java ...

  10. 【转】Rancher 2.0 里程碑版本:支持添加自定义节点!

    原文链接: http://mp.weixin.qq.com/s?__biz=MzIyMTUwMDMyOQ==&mid=2247487533&idx=1&sn=c70258577 ...