[MySQL5.6 新特性] 全局事务标示符(GTID)

GTID的全称为 global transaction identifier  , 可以翻译为全局事务标示符,GTID在原始master上的事务提交时被创建。GTID需要在全局的主-备拓扑结构中保持唯一性,GTID由两部分组成:

GTID = source_id:transaction_id

source_id用于标示源服务器,用server_uuid来表示,这个值在第一次启动时生成,并写入到配置文件data/auto.cnf中

transaction_id则是根据在源服务器上第几个提交的事务来确定。

一个GTID的生命周期包括:

1.事务在主库上执行并提交

给事务分配一个gtid(由主库的uuid和该服务器上未使用的最小事务序列号),该GTID被写入到binlog中。

2.备库读取relaylog中的gtid,并设置session级别的gtid_next的值,以告诉备库下一个事务必须使用这个值

3.备库检查该gtid是否已经被其使用并记录到他自己的binlog中。slave需要担保之前的事务没有使用这个gtid,也要担保此时已分读取gtid,但未提交的事务也不恩呢过使用这个gtid.

4.由于gtid_next非空,slave不会去生成一个新的gtid,而是使用从主库获得的gtid。这可以保证在一个复制拓扑中的同一个事务gtid不变。

由于GTID在全局的唯一性,通过GTID,我们可以在自动切换时对一些复杂的复制拓扑很方便的提升新主库及新备库,例如通过指向特定的GTID来确定新备库复制坐标。

当然,使用GTID也有一些限制:

1.事务中的更新包含非事务性存储引擎,这可能导致多个GTID分配给同一个事务。

2. create table…select语句不被支持,因为该语句会被拆分成create table 和insert两个事务,并且这个两个事务被分配了同一个GTID,这会导致insert被备库忽略掉。

3.不支持CREATE/DROP临时表操作

可以看到,支持GTID的复制对一些语句都有一些限制,MySQL也提供了一个选项disable-gtid-unsafe-statements以禁止这些语句的执行。

参考:

http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html

http://dev.mysql.com/doc/refman/5.6/en/replication-gtids-restrictions.html

http://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html

原创文章,转载请注明: 转载自Simple Life

本文链接地址: [MySQL5.6 新特性] 全局事务标示符(GTID)

时间: 2024-11-03 03:28:18

[MySQL5.6 新特性] 全局事务标示符(GTID)的相关文章

MySQL5.6 新特性之GTID【转】

转自 MySQL5.6 新特性之GTID - jyzhou - 博客园http://www.cnblogs.com/zhoujinyi/p/4717951.html 背景: MySQL5.6在5.5的基础上增加了一些改进,本文章先对其中一个一个比较大的改进"GTID"进行说明. 概念: GTID即全局事务ID(global transaction identifier),GTID实际上是由UUID+TID组成的.其中UUID是一个MySQL实例的唯一标识.TID代表了该实例上已经提交的

MySQL5.7新特性——gtid基础

1.MySQL5.7 新特性:gtid复制 ①:GTID是什么 是事务的ID,唯一识别号,全局唯一. 随事务记录到Binary Log中,用来标识事务. 每个事务有一个Gtid_log_event. ②:GTID的构成 UUID + Sequence Number 注意:Sequence Number是MySQL服务器内部的一个事务顺序号.一个MySQL服务器上的事务不会有重复的顺序号(保证服务器内唯一). 每个MySQL服务器有一个全局唯一的UUID. ③:GTID的目的 简化复制的使用过程和

mysql5.7新特性探究

一.MySql5.7增加的特性 1.MySql服务方面新特性 1) 初始化方式改变 MySql5.7之前版本初始化方式: scripts/mysql_install_db MySql5.7版本初始化方式: [[email protected] mysql_new]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql_new/ --datadir=/usr/local/mysql_new/data/ 2015-10-

MySQL5.6 新特性之GTID

MySQL5.6在5.5的基础上增加了一些改进,本文章先对其中一个一个比较大的改进"GTID"进行说明. 概念: GTID 即全局事务ID(global transaction identifier),GTID实际上是由UUID+TID组成的.其中UUID是一个MySQL实例的唯一标识.TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增.下面是一个GTID的具体形式: 4e659069-3cd8-11e5-9a49-001c4270714e:1-77 更具体的说明见 官方

mysql-5.6新特性

1. undo log undo log分离到独立的表空间,并放到单独的文件目录下:这给我们部署不同IO类型的文件位置带来便利,对于并发写入型负载,我们可以把undo文件部署到单独的高速存储设备上. 1.1. 设置 vim /etc/my.cnf [mysqld] innodb_undo_directory=/data/undolog innodb_undo_log=128 innodb_undo_tablespaces=16 1.2. 说明 innodb_undo_directory 用来指定

MySQL5.7新特性——在线收缩undo表空间

1. MySQL 5.5时代的undo log 在MySQL5.5以及之前,大家会发现随着数据库上线时间越来越长,ibdata1文件(即InnoDB的共享表空间,或者系统表空间)会越来越大,这会造成2个比较明显的问题: (1)磁盘剩余空间越来越小,到后期往往要加磁盘: (2)物理备份时间越来越长,备份文件也越来越大. 这是怎么回事呢? 原因除了数据量自然增长之外,在MySQL5.5以及之前,InnoDB的undo log也是存放在ibdata1里面的.一旦出现大事务,这个大事务所使用的undo

mysql5.7新特性

mysql5.7版本出来后还是有大量的修改以及一些调优,修复一些bug,删掉了一些旧的参数,在这里就简单的整理一下 因为平时都是使用二进制包安装mysql,所以这里就以mysql的二进制包部署开始.首先,mysql的安装初始化抛弃了旧版的mysql_install_db而使用mysqld --initialize初始化,在完成初始化后mysql的root密码并不是空密码,而是在初始化后会给出一个随机密码,要正常使用时需要在改掉密码后才可以使用,在mysql其他的安装部分都和以前的版本都是一样的

mysql5.7新特性JSON数据类型解析

废话不多说,直接上实例. 一.json结构 创建测试表 CREATE TABLE `article` (   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,   `category` json NOT NULL,   `tags` json NOT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 分析:article表中的字段catego

MySQL5.7新特性:lossless replication 无损复制

MySQL的三种复制方式 asynchronous 异步复制 fully synchronous 全同步复制 Semisynchronous 半同步复制 asynchronous replication 原理:在异步复制中,master写数据到binlog且sync,slave request binlog后写入relay-log并flush disk优点:复制的性能最好缺点:master挂掉后,slave可能会丢失事务代表:MySQL原生的复制 fully synchronous replic