七. GTID的限制以及解决方案

7.1 事务中混合多个存储引擎,会产生多个GTID。

当使用GTID,在同一个事务中,更新包括了非事务引擎(MyISAM)和事务引擎(InnoDB)表的操作,就会导致多个GTID分配给同一个事务。

mysql> CREATE TABLE `t_test_myisam` (
-> `id` int(11) NOT NULL,
-> `name` varchar(10) DEFAULT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec) mysql> begin;
Query OK, 0 rows affected (0.00 sec) mysql> update t_test set name ='aa1' where id =1;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> insert into t_test_myisam values(1,'aa2');
ERROR 1785 (HY000): Statement violates GTID consistency:
Updates to non-transactional tables can only be done in either autocommitted statements
or single-statement transactions, and never in the same statement as updates to transactional tables.

7.2 主从表的存储引擎不一致,会导致数据不一致。

7.3 基于GTID复制,不支持CREATE TABLE....SELECT 语句

该语句实际上被记录为两个单独的事件,一个是创建表,另一个插入数据。当事务执行该语句时,在一些情况下,这两个事件可能接收到相同的事务ID,导致插入的事件被从库跳过。

mysql> create table t_test_new as  select * from t_test;
ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.

解决方案:

mysql> create table t_test_new like t_test;
Query OK, 0 rows affected (0.06 sec) mysql> insert into t_test_new select * from t_test;
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0

7.4 不支持事务里包含 CREAT TEMPORARY TABLE和DROP TEMPORARY TABLE

在 autocommit=1的情况下,可以创建临时表,MASTER创建临时表不产生GTID信息,所以不会同步到SLAVE。

#事务里
mysql> begin;
Query OK, 0 rows affected (0.00 sec) mysql> CREATE TEMPORARY TABLE TMP_TEST(ID int);
ERROR 1787 (HY000): Statement violates GTID consistency:
CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can only be executed outside transactional context.
These statements are also not allowed in a function or trigger because functions and triggers are
also considered to be multi-statement transactions. #事务外
mysql> CREATE TEMPORARY TABLE TMP_TEST(ID int);
Query OK, 0 rows affected (0.00 sec)

MySQL5.7中cache里面的机制,大体来说,binlog有两个cache来缓存事务的binlog

#存放非事务表和临时表binlog
binlog_cache_data stmt_cache;
#存放事务表binlog
binlog_cache_data trx_cache;

GTID中,会检查这两个cache,如有冲突,则抛出错误

7.5 不推荐在GTID模式的实例上进行 mysql_upgrade

归根结底,还是因为mysql_upgrade的过程中要创建或修改系统表(非事务引擎)

MySQL GTID (四)的更多相关文章

  1. mysql gtid 主从复制

    基于GTID环境搭建主从复制 1.环境 ----------------------------------------------------------| |mysql版本 | 5.7.14 | ...

  2. MySQL GTID 错误处理汇总

    MySQL GTID是在传统的mysql主从复制的基础之上演化而来的产物,即通过UUID加上事务ID的方式来确保每一个事物的唯一性.这样的操作方式使得我们不再需要关心所谓的log_file和log_P ...

  3. MySQL GTID (二)

    MySQL GTID 系列之二 三.在线将GTID转化为传统模式 环境见上篇系列文章 关闭GTID,不用停止服务,不影响线上业务 3.1 关闭GTID复制,调整为传统复制 #SLVAE实例上停止复制 ...

  4. MySQL优化四(优化表结构)

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  5. Python/MySQL(四、MySQL数据库操作)

    Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...

  6. day40 python MySQL【四】 之 【索引】【视图】【触发器】【存储过程】【函数】

    MySQL[四] 之 [索引][视图][触发器][存储过程][函数]   1.索引 索引相当于图书的目录,可以帮助用户快速的找到需要的内容. 数据库利用各种各样的快速定位技术,能够大大提高查询效率.特 ...

  7. 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)

    一.初识MySQL数据库 ###<1>数据库概述     1. 数据库         长期存储在计算机内的,由组织的可共享的数据集合         存储数据的仓库         文件 ...

  8. MySQL GTID你知多少【转】

    MySQL在5.6的版本推出了GTID复制,相比传统的复制,GTID复制对于运维更加友好,这个事务是谁产⽣,产⽣多少事务,⾮常直接的标识出来,当然GTID也有限制,对于什么是GTID可以参考我之前的文 ...

  9. MySQL GTID (一)

    MySQL GTID 系列之一 一.GTID相关概念 GTID:全局事务标识符,MySQL5.6版本开始在主从复制中推出的重量级特性. 每提交一个事务,当前执行线程都会拿到一个给定复制环境中唯一的GT ...

随机推荐

  1. nyoj1273 河南省第九届省赛_"宣传墙"、状压DP+矩阵幂加速

    宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...

  2. IOS-网络(文件压缩和解压缩)

    // // ViewController.m // IOS_0206_文件上传 // // Created by ma c on 16/2/6. // Copyright © 2016年 博文科技. ...

  3. [批处理]批量提取MKV资源

    最初是下了部没字幕的动漫,是720P MKV格式的,当时没注意,下完了以后才发现是没字幕的 后来去射手上找没有,百度了半天也没有 最后只能求救与已经下了这部动漫是MKV格式且是内挂字幕的人来帮忙 最后 ...

  4. Ubuntu 16.04系统开机紫屏的解决办法

    具体症状为卡在开机界面,按任何键都无反应. 网上查看了几篇文章 ,如下: 解决:ubuntu16.04启动时长时间停留在紫屏或跳文本的黑屏界面 Ubuntu16.04显卡驱动 电源管理 里面提到的开机 ...

  5. Android Studio利用GitHub托管项目

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

  6. Java SE 8 流库(一)

    1. 流的作用 通过使用流,说明想要完成什么任务,而不是说明如何去实现它,将操作的调度留给具体实现去解决: 实例:假如我们想要计算某个属性的平均值,那么我们就可以指定数据源和属性,然后,流库就可以对计 ...

  7. Zabbix proxy 3.2安装部署

    zabbix proxy 前提环境: CentOS 6 LNMP(php) 版本:Zabbix-3.2.3 proxy安装 yum install -y net-snmp \ net-snmp-dev ...

  8. Java第五次作业--面向对象高级特性(抽象类和接口)

    一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握抽象类的设计 掌握接口的设计 理解简单工厂设计模式 理解抽象类和接口的区别 掌握包装类的应用 掌握对象的比较方法和比较器的使用 学习使用日期操 ...

  9. Buildroot make网卡interfaces文件被修改

    /******************************************************************************** * Buildroot make网卡 ...

  10. 文本框模糊匹配(纯html+jquery简单实现)

    一.项目中需要用到此功能,使用过EasyUI中的Combobox,网上也搜过相应的解决办法,对于我的项目来说都不太合适,因为我还是喜欢比较纯粹的东西,就自己动手写了一个,比较简单,但还算能用,我的项目 ...