在日常运维中,GTID带来的最方便的作用就是搭建和维护主从复制。GTID的主从模式代替了MySQL早期版本中利用二进制日志文件的名称和日志位置的做法,使用GTID使操作和维护都变得更加简洁和可高。

1.GTID的优点

(1)基于GTID搭建主从复制根据简单。

(2)可以确保每个事务只会被执行一次。

(3)可以方便的实现Replication的Failover,不需要像传统模式复制那样去找master_log_file和master_log_pos。

(4)GTID在MGR中也发挥了中要作用。MGR各节点之间复制依赖于GTID,并且在集群节点进行Recover重新加入到集群的操作中,会选择其中一个节点作为Donor,然后基于Purged的GTID开始同步数据。MGR还是通过GTID进行冲突验证,用于跟踪每个实例上提交的事务,确定哪些事务可能有冲突。

2.使用GTID搭建主从时,需要注意的MySQL参数。

(1)server_id: 设置MySQL实例的server_id,每个实例的server_id不能一样。

(2)gtid_mod=ON: MySQL实例开启GTID模式。

(3)enforce_gtid_consitency=ON: 使用GTID模式复制时,需要开启此参数,用来保证GTID的一致性。

(4)log-bin: MySQL必须开启Binlog。

(5)log-slave-updates=1: 决定slave从master接受到的更新且执行之后,执行的Binlog是否记录到salve的Binlog中,建议开启。

(6)binlog_format=ROW:强烈建议binlog_format使用ROW格式,其它格式可能造成数据不一致。

(7)skip-slave-start=1:当salve数据库启动的时候,salve不会自动开启复制。

3.使用GTID的注意事项

由于基于GTID的复制依赖于事务,所以在使用GTID时,有些MySQL特性不支持。

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

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

(2)主从库的表存储引擎不一致,会导致数据不一致。

如果主从库的存储引擎不一致,例如一个是事务存储引擎,一个是非事务存储引擎,则会导致事务和GTID之间一对一的关系被破坏,结果导致基于GTID的复制不能正确地运行。

(3)基于GTID模式复制,不支持Create table ...select 语句。

因为使用基于行模式的复制时,该语句实际上被记录为两个单独的事件,一个是创建表,另一个是将原表中的数据插入到刚刚新建的表中。当在事务中执行该语句时,在一些情况下。这两个事务可能接收到相同的事务ID,这意味着包含插入的事务将被从库挑过。

(4)不支持Create Temporary table 和 drop temporary table。

使用GTID复制时, 不支持Create Temporary table 和 drop temporary table。但是,在autocommit=1的情况下可以创建临时表,master创建临时表不产生GTID信息,所以不会同步到Salve上,但是删除临时表时,产生GTID会导致主从中断。

(5)不推荐在GTID模式的实例上进行mysql_upgrade.

因为mysql_upgrade的过程要创建或修改系统表,而系统表时非事务引擎,所以不建议在开启GTID模式的实例上使用带有--write-binlog选项的mysql_upgrade。

(6)一旦在给定的MySQL实例中提交了事务,具有相同GTID的事务便会被该服务器忽略。而且,在主实例上提交的事务在从库上只可以应用一次。

-----主要内容参考梳理于网络知识,此短文仅为学习笔记,在此原创作者感谢!

MySQL 基础知识梳理学习(四)----GTID的更多相关文章

  1. MySQL 基础知识梳理学习(五)----详解MySQL两次写的设计及实现

    一 . 两次写提出的背景或要解决的问题 两次写(InnoDB Double Write)是Innodb中很独特的一个功能点.因为Innodb中的日志是逻辑的,所谓逻辑就是比如插入一条记录时,它可能会在 ...

  2. MySQL 基础知识梳理学习(三)----InnoDB日志相关的几个要点

    1.InnoDB的特点 :(1)Fully ACID (InnoDB默认的Repeat Read隔离级别支持):(2)Row-level Locking(支持行锁):(3)Multi-version ...

  3. MySQL 基础知识梳理学习(七)----sync_binlog

    一般在生产环境中,很少用MySQL单实例来支撑业务,大部分的MySQL应用都是采用搭建集群的方法.搭建MySQL集群,可以进行数据库层面的读写分离.负载均衡或数据备份.基于MySQL原生的Replic ...

  4. MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理

    1.InnoDB的数据存储结构 InnoDB中数据是通过段.簇.页面构成的. (1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引.表.回滚段的基本元素.创建一个索引( ...

  5. MySQL 基础知识梳理学习(五)----半同步复制

    1.半同步复制的特征 (1)从库会在连接到主库时告诉主库,它是不是配置了半同步. (2)如果半同步复制在主库端是开启了的,并且至少有一个半同步复制的从节点,那么此时主库的事务线程在提交时会被阻塞并等待 ...

  6. MySQL 基础知识梳理学习(一)----系统数据库

    information_schema 此数据库是MySQL数据库自带的,主要存储数据库的元数据,保存了关于MySQL服务器维护的所有其他数据库的信息,如数据库名.数据库表.表列的数据类型及访问权限等. ...

  7. MySQL 基础知识梳理学习(六)----锁

    1.什么是锁: 对共享资源进行并发访问控制,提供数据的完整性和一致性. 2.锁的区别: 类型 lock latch 对象 事务 线程 保护 数据库内容 内存数据结构 持续时间 整个事务过程 临界资源 ...

  8. MySQL 基础知识梳理

    MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...

  9. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

随机推荐

  1. [Swift]LeetCode435. 无重叠区间 | Non-overlapping Intervals

    Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...

  2. [Swift]LeetCode697. 数组的度 | Degree of an Array

    Given a non-empty array of non-negative integers nums, the degreeof this array is defined as the max ...

  3. [Swift]LeetCode1000. 合并石头的最低成本 | Minimum Cost to Merge Stones

    There are N piles of stones arranged in a row.  The i-th pile has stones[i] stones. A move consists ...

  4. Python Matplotlib.pyplot plt 中文显示

    话不多说,上代码 # -*- coding: UTF-8 -*- import matplotlib.pyplot as plt from matplotlib.font_manager import ...

  5. qt deleterLater

    原文链接:浅谈 Qt 内存管理     Qt 内存管理是本文将要介绍的内容,在QT的程序中经常会看到只有new而不delete的情况,其实是因为QT有一套回收内存的机制,主要的规则如下: 1.所有继承 ...

  6. java基础(十七)----- 浅谈Java中的深拷贝和浅拷贝 —— 面试必问

    假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...

  7. 华为oj之求int型正整数在内存中存储时1的个数

    题目: 求int型正整数在内存中存储时1的个数 热度指数:4427 时间限制:1秒 空间限制:32768K 题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: ...

  8. ASP.NET中共有哪几种类型的控件?其中,HTML控件、HTML服务器控件和WEB服务器控件之间有什么区别

    ASP.NET的控件包括WEB服务器控件.WEB用户控件.WEB自定义控件.HTML服务器控件和HTML控件.HTML控件.HTML服务器控件和WEB服务器控件之间的区别如下所示.q      HTM ...

  9. 带着萌新看springboot源码05

    上一节走了一遍从浏览器发出请求到得到向页面的流程,基本的功能是已经实现了.但是现在啊,我想自定义一个拦截器(拦截器可以做用户登录验证,如果登录了,就让你通过,如果没有登录,就重定向登录页面),这里就不 ...

  10. Java多线程之Executor框架和手写简易的线程池

    目录 Java多线程之一线程及其基本使用 Java多线程之二(Synchronized) Java多线程之三volatile与等待通知机制示例 线程池 什么是线程池 线程池一种线程使用模式,线程池会维 ...