mysql gtid 第一篇
GTID
1 简介
就是全局事务ID(global transaction identifier )
2 构成
uuid+transaction_id
3 格式
7a07cd08-ac1b-11e2-9fcf-0010184e9e08:1-N
解析两个binlog 分析记录格式
binlog1
#171228 11:14:33 server id 71 end_log_pos 120 CRC32 0x0d525104 Start: binlog v 4, server v 5.6.21-r5436-log created 171228 11:14:33
# at 120
#171228 11:14:33 server id 71 end_log_pos 231 CRC32 0xa8f24351 Previous-GTIDs
# UUID:1-798040662,
# UUID:1-518
binlog2
# at 4
#180102 10:35:05 server id 71 end_log_pos 120 CRC32 0x8f29d513 Start: binlog v 4, server v 5.6.21-r5436-log created 180102 10:35:05
# at 120
#180102 10:35:05 server id 71 end_log_pos 231 CRC32 0x64845fb6 Previous-GTIDs
# UUID:1-799601894,
# UUID:1-518
Previous-GTIDs 可以看出,每个binlog开头都记录着从GTID开启到这个binlog之前的binlog文件GTID执行事务的总和
注意:
1 即便binlog文件被清理,也不会影响这个值
2 每个文件尤其只有开头一个 3 使用这个值,可以便于快速判断GTID是否位于当前binlog文件中
相关变量解析
gtid_executed 状态:不可以手动更改 内容:已经执行过的事务GTID总和,RESET MASTER会清空此值
gtid_purged 状态:可以手动更改 内容:已经被删除的binlog的事务GTID,它是GTID_EXECUTED的子集
gtid_owned 状态:不可以手动更改 内容:当前执行的事务GTID
binlog_gtid_simple_recovery 状态:可以手动更改 内容:这个选项设置为真,会提升mysql执行恢复的性能。因为这样mysql-server启动和binlog日志清理更快。该参数为真时,mysql-server只需打开最老的和最新的这2个binlog文件,gtid_purged参数的值和gtid_executed 参数的值可以根据这些文件中的Previous_gtids_log_event 或者 Gtid_log_event计算得出。这确保了当mysql-server重启或清理binlog时,只需打开2个binlog文件。
mysql 5.7.6后默认为真 属于优化参数
gtid_executed_compression_period 状态:可以手动更改 内容:进行压缩,减少空间占用,默认值为1000,表示每执行1000个事务后进行一次压缩
4 mysql 5.6开启GTID
gtid-mode = ON
enforce-gtid-consistency=1
log-slave-updates=1
binlog_format=row
注意点
1 mysql5.6只能重启才能使GTID生效
5 mysql 5.7.6开启GTID
在线开启
主从都需要执行
实现步骤:
1. 所有的Server执行
set @@global.enforce_gtid_consistency = warn;
特别注意: 这一步是关建的一步使用不能出现警告。
2.所有的server上执行:
set @@global.enforce_gtid_consistency = on;
3.所有的Server上执行(不关心最先最后,但要执行完):
set @@global.gtid_mode = off_permissive;
4. 执行:
set @@global.gtid_mode=on_permissive;
实质在这一步骤生的日志都是带GTID的日志了,这个步骤号称是不关心任何节点,但从实管理上推荐在slave上先执行,然后再去master上执行。
5. 确认传统的binlog复制完毕,该值为0
show status like 'ongoing_anonymous_transaction_count';
需要所有的节点都确认为0.
6. 所有节点进行判断 show status like 'ongoing_anonymous_transaction_count'; 为零
所有的节点也可以执行一下: flush logs; 用于切换一下日志。
7. 所有的节点启用gtid_mode
set @@global.gtid_mode=on
8. 把gtid_mode = on相关配置写入配置文件
gtid_mode=on
enforce_gtid_consistency=on
9. 启用Gtid的自动查找节点复制:
stop slave;
change master to master_auto_position=1;
start slave;
注意点:1 只有版本大于5.7.6的mysql才能支持在线从传统复制切换到GTID复制
2 关于gtid_mode选项名词说明,控制新事物产生是什么模式
GTID_MODE = OFF : 不产生Normal_GTID,只接受来自master的ANONYMOUS_GTID
GTID_MODE = OFF_PERMISSIVE : 不产生Normal_GTID,可以接受来自master的ANONYMOUS_GTID & Normal_GTID
GTID_MODE = ON_PERMISSIVE : 产生Normal_GTID,可以接受来自master的ANONYMOUS_GTID & Normal_GTID
GTID_MODE = ON : 产生Normal_GTID,只接受来自master的Normal_GTID
3 GTID在线切换不必考虑主从是否一致性生成GTID日志,因为并不影响同步,只有最后一步才会真正的采用GTID同步
xtarbackup如何利用GTID搭建从库
1 xtarbackup备份(在其中一个从库中)
2 xtarbackup --apply-log and copy-back
3 察看info信息
xtarbackup_info
4 手动purge
reset master;
清除gtid_executed表信息;
SET GLOBAL gtid_purged='UUID-transationid'
4 进行同步
change master to auto_position=1
5 start slave
GTID 主从相关
Retrieved_Gtid_Set 接收到的GTID事务 注意接收到的GTID事务有可能不一致
Executed_Gtid_Set 已经执行的GTID事务包括自然同步和手动purge两部分
GTID主从不一致情况
如何跳过错误
stop slave;
set gtid_next="冲突的GTID号";
begin;commit;
set gtid_next="AUTOMATIC";
start slave;
补充
1. 假设现在我们要找GTID=$A,那么MySQL的扫描顺序为: 从最后一个binlog开始扫描(即:bin.004)
2. bin.004的Previous-GTIDs=1-120,如果$A=140 > Previous-GTIDs,那么肯定在bin.004中
3. bin.004的Previous-GTIDs=1-120,如果$A=88 包含在Previous-GTIDs中,那么继续对比上一个binlog文件 bin.003,然后再循环前面2个步骤,直到找到为止
MHA架构
mha0.56支持5.6以上的GTID自动切换,日志会自动生成change语句
GTID 本身的限制
mysql gtid 第一篇的更多相关文章
- 小白两篇博客熟练操作MySQL 之 第一篇
小白两篇博客熟悉操作MySQL 之 第一篇 一.概述 1. 什么是数据库? 答: 储存数据的仓库, 如: 在ATM的事例中创建的一个db 目录, 称为数据库 2. 什么是Mysql, Oracl ...
- MySQL【第一篇】安装
一.简介 MySQL 是最流行的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言.MySQL由于其体积小. ...
- mysql优化----第一篇:综述
一 系统层面 查看CPU和IO状态,确定瓶颈.增 更换设备 二 数据库层面 1 参数优化. 参考文章<mysql性能优化----调整参数>增大数据库内存缓存等设置. 参考 http: ...
- Centos6.7 安装zabbix+apache+mysql教程(第一篇)
Centos6.7 安装zabbix+apache+mysql教程 blog地址: http://www.cnblogs.com/caoguo ### 基本包安装 ### [root@ca0gu0 ~ ...
- 精通MySQL之架构篇
老刘是即将找工作的研究生,自学大数据开发,一路走来,感慨颇深,网上大数据的资料良莠不齐,于是想写一份详细的大数据开发指南.这份指南把大数据的[基础知识][框架分析][源码理解]都用自己的话描述出来,让 ...
- 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)
Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...
- 【转帖】Mysql多维数据仓库指南 第一篇 第1章
Mysql多维数据仓库指南 第一篇基本原理 章节列表: 第1章:基本组成 第2章:维度历史 第3章:维度可加性 第4章:维度查询 本篇概述 你将运用关系数据库来实施一个维度数据仓库.事实表和维表这两 ...
- Mysql优化(出自官方文档) - 第一篇(SQL优化系列)
Mysql优化(出自官方文档) - 第一篇 目录 Mysql优化(出自官方文档) - 第一篇 1 WHERE Clause Optimization 2 Range Optimization Skip ...
- [译]PrestaShop开发者指南 第一篇 基础
# 第一篇 基础 PS(PrestaShop简称)一开始就设定了能够在它的基础上很简单的构建第三方模块的机制,让它成为一款具有极高定制性的电子商务软件. PS的可以在三个方面进行定制: * 主题 * ...
随机推荐
- [IOI2018]会议——分治+线段树
题目链接: [IOI2018]meetings 题目大意:有$n$座山峰,每座山峰有一个高度,有$q$次询问,每次需要确定一个开会山峰使$[l,r]$所有山峰上的人都前往开会山峰,一个山峰的人去开会的 ...
- BZOJ4551[Tjoi2016&Heoi2016]树——dfs序+线段树/树链剖分+线段树
题目描述 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均 ...
- Leetcode 190.颠倒二进制位 By Python
颠倒给定的 32 位无符号整数的二进制位. 示例: 输入: 43261596 输出: 964176192 解释: 43261596 的二进制表示形式为 000000101001010000011110 ...
- 牛客练习赛 小D的Lemon 解题报告
小D的Lemon 题意 已知 \[ g(x)=\left\{\begin{matrix} 1&,x=1\\ \sum_{i=1}^qk_i&,otherwise \end{matrix ...
- wireshark配合jmeter测试webservice接口
1.首先,获取本地和接口的ip,以便设置过滤 2.wireshark设置过滤 ip.dst==192.168.0.101 and ip.src==61.147.124.120 and http 3.执 ...
- 震惊!1MB == 1000KB??
稍微对电脑了解一点的同学可能都知道,电脑中的单位换算是: 1KB = 1024B 1MB = 1024KB 1GB = 1024MB ... 以前,我也是这么认为的.... 最近我在Linux解压某个 ...
- Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分)
Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分) Description L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之 ...
- java NIO 直接与非直接缓冲区
ByteBuffer有两个创建缓冲区的方法:static ByteBuffer allocate(int capacity)static ByteBuffer allocateDirect(int c ...
- SpringMVC接受JSON参数详解及常见错误总结我改
SpringMVC接受JSON参数详解及常见错误总结 最近一段时间不想使用Session了,想感受一下Token这样比较安全,稳健的方式,顺便写一个统一的接口给浏览器还有APP.所以把一个练手项目的前 ...
- Vue初学者可能不知道的坑
1.setTimeout/ setInterval 场景一 :this指向改变无法用this访问vue实例 mounted(){ setTimeout( function () { //setInte ...