GTID 笔记
1.生成事务
root@(none)>use pxc01
Database changed
root@pxc01>create table tbx(id int);
Query OK, 0 rows affected (0.15 sec) root@pxc01>insert into tbx values(1);
Query OK, 1 row affected (0.13 sec) root@pxc01>select * from tbx;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec) 2.确认当前二进制文件位置
root@pxc01>show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000013 | 1040 | | | 015d4d11-0363-11e9-bb6c-0800279a3030:1-4 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec) root@pxc01> 3.查看二进制文件中的事件(Previous_gtids 和 Gtid)
root@pxc01>show binlog events IN 'mysql-bin.000013';
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| mysql-bin.000013 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.23-23-31.31-log, Binlog ver: 4 |
| mysql-bin.000013 | 123 | Previous_gtids | 1 | 154 | |
| mysql-bin.000013 | 154 | Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= '015d4d11-0363-11e9-bb6c-0800279a3030:1' |
| mysql-bin.000013 | 219 | Query | 1 | 467 | GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.2.%' IDENTIFIED WITH 'mysql_native_password' AS '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| mysql-bin.000013 | 467 | Gtid | 1 | 532 | SET @@SESSION.GTID_NEXT= '015d4d11-0363-11e9-bb6c-0800279a3030:2' |
| mysql-bin.000013 | 532 | Query | 1 | 619 | flush privileges |
| mysql-bin.000013 | 619 | Gtid | 1 | 684 | SET @@SESSION.GTID_NEXT= '015d4d11-0363-11e9-bb6c-0800279a3030:3' |
| mysql-bin.000013 | 684 | Query | 1 | 784 | use `pxc01`; create table tbx(id int) |
| mysql-bin.000013 | 784 | Gtid | 1 | 849 | SET @@SESSION.GTID_NEXT= '015d4d11-0363-11e9-bb6c-0800279a3030:4' |
| mysql-bin.000013 | 849 | Query | 1 | 922 | BEGIN |
| mysql-bin.000013 | 922 | Table_map | 1 | 969 | table_id: 109 (pxc01.tbx) |
| mysql-bin.000013 | 969 | Write_rows | 1 | 1009 | table_id: 109 flags: STMT_END_F |
| mysql-bin.000013 | 1009 | Xid | 1 | 1040 | COMMIT /* xid=60 */ |
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
13 rows in set (0.00 sec) 4.查看全局变量 gtid_executed
root@pxc01>show global variables like 'gtid%';
+----------------------------------+------------------------------------------+
| Variable_name | Value |
+----------------------------------+------------------------------------------+
| gtid_executed | 015d4d11-0363-11e9-bb6c-0800279a3030:1-4 |
| gtid_executed_compression_period | 1000 |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | |
+----------------------------------+------------------------------------------+
5 rows in set (0.01 sec) root@pxc01> GTID的持久化:
1.gtid_executed被设置为最新的binlog文件中Previous_gtids_log_event和所有Gtid_log_event的并集。
2.gtid_purged为最老的binlog文件中Previous_gtids_log_event。
由于这两个重要的变量值记录在binlog中,所以开启gtid_mode时必须同时在主库上开启log_bin在备库上开启log_slave_updates。但是,在MySQL5.7中没有这个限制。MySQL5.7中,
新增加一个系统表mysql.gtid_executed用于持久化已执行的GTID集合。当主库上没有开启log_bin或在备库上没有开启log_slave_updates时,mysql.gtid_executed会跟用户事务一起每次更新。否则只在binlog日志发生rotation时更新mysql.gtid_executed。
《与MySQL传统复制相比,GTID有哪些独特的复制姿势》 GTID和Binlog之间的关系是怎么对应的呢: * 假设有4个binlog: bin.001,bin.002,bin.003,bin.004
* bin.001 : Previous-GTIDs=empty; binlog_event有:1-40
* bin.002 : Previous-GTIDs=1-40; binlog_event有:41-80
* bin.003 : Previous-GTIDs=1-80; binlog_event有:81-120
* bin.004 : Previous-GTIDs=1-120; binlog_event有:121-160 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个步骤,直到找到为止
《MySQL5.7杀手级新特性:GTID原理与实战》https://yq.aliyun.com/articles/57731 重要参数如何持久化:
1) 如何持久化gtid_executed [ log-bin=on,log_slave_update=on ]
1. gtid_executed = mysql.gtid_executed 【normal】
or
2. gtid_executed = mysql.gtid_executed + last_binlog中最后没写到mysql.gtid_executed中的gtid_event 【recover】 2) 如何持久化重置的gtid_purged值?
reset master; set global gtid_purged=$A:a-b;
1. 由于有可能手动设置过gtid_purged=$A:a-b, binlog.index中,last_binlog的Previous-GTIDs并不会包含$A:a-b
2. 由于有可能手动设置过gtid_purged=$A:a-b, binlog.index中,first_binlog的Previous-GTIDs肯定不会出现$A:a-b
3. 重置的gtid_purged = @@global.gtid_executed(mysql.gtid_executed:注意,考虑到这个表的更新触发条件,所以这里用@@global.gtid_executed代替) - last_binlog的Previous-GTIDs - last_binlog所有的gtid_event
4. 下面就用 $reset_gtid_purged 来表示重置的gtid 3)如何持久化gtid_purged [ log-bin=on,log_slave_update=on ]
gtid_purged=binlog.index:first_binlog的Previous-GTIDs + $reset_gtid_purged 开启GTID的必备条件:
MySQL 5.6
gtid_mode=ON(必选)
log_bin=ON(必选)
log-slave-updates=ON(必选)
enforce-gtid-consistency(必选) MySQL 5.7 or higher
gtid_mode=ON(必选)
enforce-gtid-consistency(必选)
log_bin=ON(可选)--高可用切换,最好设置ON
log-slave-updates=ON(可选)--高可用切换,最好设置ON GTID的Limitation
不安全的事务
1. CREATE TABLE ... SELECT statements
2. CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements inside transactions
3. 同时更新 事务引擎 和 非事务引擎
GTID 笔记的更多相关文章
- MySQL5.7 GTID学习笔记
GTID(global transaction identifier)是对于一个已提交事务的全局唯一编号,前一部分是server_uuid,后面一部分是执行事务的唯一标志,通常是自增的. 下表整理了G ...
- MySQL5.7 GTID学习笔记,[MySQL 5.6] GTID实现、运维变化及存在的bug
GTID(global transaction identifier)是对于一个已提交事务的全局唯一编号,前一部分是server_uuid,后面一部分是执行事务的唯一标志,通常是自增的. 下表整理 ...
- Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...
- Linux下MySQL主从复制(GTID)+读写分离(ProxySQL)-实施笔记
GTID概念: GTID( Global Transaction Identifier)全局事务标识.GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文 ...
- Android学习笔记(二)——探究一个活动
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一 ...
- mysql 5.7压缩包安装笔记
转载请注明出处http://www.cnblogs.com/havedream/p/5075263.html 重装系统之后准备安装mysql,看到官网上有mysql 5.7.10可以下载就点了,然后就 ...
- Elasticsearch学习笔记
Why Elasticsearch? 由于需要提升项目的搜索质量,最近研究了一下Elasticsearch,一款非常优秀的分布式搜索程序.最开始的一些笔记放到github,这里只是归纳总结一下. 首先 ...
- 基于Mysql 5.7 GTID 搭建双主Keepalived 高可用
实验环境 CentOS 6.9 MySQL 5.7.18 Keepalived v1.2.13 拓扑图 10.180.2.161 M1 10.180.2.162 M2 10.180.2.200 VIP ...
- MySQL 基础知识梳理学习(四)----GTID
在日常运维中,GTID带来的最方便的作用就是搭建和维护主从复制.GTID的主从模式代替了MySQL早期版本中利用二进制日志文件的名称和日志位置的做法,使用GTID使操作和维护都变得更加简洁和可高. 1 ...
随机推荐
- 如何让两个div并排显示
正常情况下两个div都是上下排版的,那么怎么让它们并排显示呢? 方法一:都左浮动float:left; 方法二:一个左浮动,一个右浮动 方法三:给两个div都设置display:inline属性,但两 ...
- [干货来袭]C#7.0新特性(VS2017可用)(转)
出处:http://www.cnblogs.com/GuZhenYin/p/6526041.html 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.N ...
- configparser模块读写ini配置文件
在自动化测试过程中,为了提高脚本的可读性和降低维护成本,将一些通用信息写入配置文件,将重复使用的方法写成公共模块进行封装,使用时候直接调用即可. 这篇博客,介绍下python中利用configpars ...
- Logback configuration
官方指导 http://logback.qos.ch/manual/configuration.html 规则 ch.qos.logback.core.joran.JoranConfiguratorB ...
- requestAnimationFrame 定时器
这个方法是通过递归调用同一方法来不断更新画面以达到动起来的效果,但它优于setTimeout/setInterval的地方在于它是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并 ...
- 【转载】python计算文件的行数和读取某一行内容的实现方法
一.计算文件的行数 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count = len(o ...
- 通过python实现wc基本功能
---恢复内容开始--- 1.Github项目地址: https://github.com/zhg1998/ww/blob/master/wc.py 2.项目相关要求: 写一个命令行程序,模仿已有wc ...
- VS 和Visual Assist X快捷键(转)
Visual Assist X 最有用的快捷键 1.Alt + G: 在定义与声明之间互跳. 2.Alt + O: 在.h与.cpp之间互跳.(O是字母O,不是数字零) 3.Alt + Shift + ...
- wp8.1 app退出操作提示
微软的wp8.1 sdk相比之前wp8 sdk以及相关dll类库,微软又重新编译过,相关系统类库也经过精简,删改了部分传统dll库中的方法对象,很多常用方法对象被写进Windows.UI为前缀的命名空 ...
- sql字段操作
--删除第一位 substring(ftpMobile,2,len(ftpMobile)-1) --检查是否是数字 ISNUMERIC(ftpMobile) =0 含数字以外字符 ISNUMERIC ...