MySQL5.7 GTID学习笔记
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学习笔记的更多相关文章
- MySQL5.7 GTID学习笔记,[MySQL 5.6] GTID实现、运维变化及存在的bug
GTID(global transaction identifier)是对于一个已提交事务的全局唯一编号,前一部分是server_uuid,后面一部分是执行事务的唯一标志,通常是自增的. 下表整理 ...
- 【工作笔记】BAT批处理学习笔记与示例
BAT批处理学习笔记 一.批注里定义:批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD,这些命令统称批处理命令. 二.常见的批处理指令: 命令清单: 1.RE ...
- Android学习笔记(二)——探究一个活动
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一 ...
- linux前四天学习笔记
以下是在linux培训机构所学的内容,感觉比较乱 MySQL学习笔记MySQL的安装 linux中的超级管理员rootaixocm vnc的退出: F8 MySQL的特点.优点:关系型开源.免费c++ ...
- 高性能MySQL--索引学习笔记(原创)
看过一些人写的学习笔记,完全按书一字不漏照抄,内容很多,真不能叫笔记.遂自己整理了一份,取其精要. 更多笔记请访问@个人简书 [toc] 索引概述 索引即key 在存储引擎层实现,不同引擎工作方式不同 ...
- MySQL学习笔记Windows篇<一> Welcome to MySQL
MySQL安装完毕后没有图形化操作界面,图形化管理界面需要另行安装,个人比较喜欢Navicat,界面更像SQLserver: 此篇学习笔记所有操作均使用命令行中完成: 1.开启/停止服务 使用MySQ ...
- MySQL学习笔记-数据库文件
数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...
- JAVA中 XML与数据库互转 学习笔记三
要求 必备知识 JAVA基础知识,XML基础知识,数据库的基本操作. 开发环境 MyEclipse10/MySql5.5 资料下载 源码下载 数据库在数据查询,修改,保存,安全等方面与其他数据处理 ...
- php入门学习笔记
学习笔记[6.5-6.13] 1.常用命令 打开数据库格式: mysql -h主机地址 -u用户名 -p 重启nginx:sudo /etc/init.d/nginx restart或者service ...
随机推荐
- Linux基础命令---lpstat查看打印任务
lpstat lpstat指令用来显示当前任务.打印机的状态.如果没有参数,那么就显示打印队列. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.openSUSE. ...
- ansible常用命令大全
ansible 默认提供了很多模块来供我们使用.在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块,通过 ansible-doc -s ...
- lmbench用于arm测试
一.下载 http://www.bitmover.com/lmbench/lmbench.html网站有lmbench的介绍 下载地址如下(lmbench3): http://www.bitmover ...
- java实现zip压缩和解压工具
引入ant.jar package com.develop.web.util; import java.io.BufferedInputStream; import java.io.File; imp ...
- [pytorch修改]dataloader.py 实现darknet中的subdivision功能
dataloader.py import random import torch import torch.multiprocessing as multiprocessing from torch. ...
- ES5的完美继承
// 定义一个动物类 function Animal (name) { // 属性 this.name = name || 'Animal'; // 实例方法 this.sleep = functio ...
- BZOJ 1269 文本编辑器editor(伸展树)
题意 https://www.lydsy.com/JudgeOnline/problem.php?id=1269 思路 伸展树(\(\text{splay}\))功能比较齐全的模板,能较好的体现 \( ...
- Google advertiser api开发概述——入门指南
使用入门 AdWords API 可让应用直接与 AdWords 平台互动,大幅提高管理大型或复杂 AdWords 帐号和广告系列的效率.一些典型的用例包括: 自动帐号管理 自定义报告 基于产品目录的 ...
- Qt自定义阴影效果和QOpenGLWidget冲突导致控件不刷新
Qt5.6.2版本存在这样一个问题(其它版本未测试),当main函数中设置了application.setAttribute(Qt::AA_NativeWindows)(用于使得每个子界面都可以获取w ...
- tomcat启动后8005端口未被占用
8005端口是tomcat本身的端口,如果这个端口在启动时未被tomcat占用的话,就无法使用它自带的shutdown.sh脚本关闭tomcat 接下来我以tomcat-9.0.12为例说明 下载to ...