MySQL 基础知识梳理学习(四)----GTID
在日常运维中,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的更多相关文章
- MySQL 基础知识梳理学习(五)----详解MySQL两次写的设计及实现
一 . 两次写提出的背景或要解决的问题 两次写(InnoDB Double Write)是Innodb中很独特的一个功能点.因为Innodb中的日志是逻辑的,所谓逻辑就是比如插入一条记录时,它可能会在 ...
- MySQL 基础知识梳理学习(三)----InnoDB日志相关的几个要点
1.InnoDB的特点 :(1)Fully ACID (InnoDB默认的Repeat Read隔离级别支持):(2)Row-level Locking(支持行锁):(3)Multi-version ...
- MySQL 基础知识梳理学习(七)----sync_binlog
一般在生产环境中,很少用MySQL单实例来支撑业务,大部分的MySQL应用都是采用搭建集群的方法.搭建MySQL集群,可以进行数据库层面的读写分离.负载均衡或数据备份.基于MySQL原生的Replic ...
- MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理
1.InnoDB的数据存储结构 InnoDB中数据是通过段.簇.页面构成的. (1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引.表.回滚段的基本元素.创建一个索引( ...
- MySQL 基础知识梳理学习(五)----半同步复制
1.半同步复制的特征 (1)从库会在连接到主库时告诉主库,它是不是配置了半同步. (2)如果半同步复制在主库端是开启了的,并且至少有一个半同步复制的从节点,那么此时主库的事务线程在提交时会被阻塞并等待 ...
- MySQL 基础知识梳理学习(一)----系统数据库
information_schema 此数据库是MySQL数据库自带的,主要存储数据库的元数据,保存了关于MySQL服务器维护的所有其他数据库的信息,如数据库名.数据库表.表列的数据类型及访问权限等. ...
- MySQL 基础知识梳理学习(六)----锁
1.什么是锁: 对共享资源进行并发访问控制,提供数据的完整性和一致性. 2.锁的区别: 类型 lock latch 对象 事务 线程 保护 数据库内容 内存数据结构 持续时间 整个事务过程 临界资源 ...
- MySQL 基础知识梳理
MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- IDEA 配置远程debug
1. 启动远程服务配置debug参数 远程服务启动时配置如下debug相关参数 java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address= ...
- bilibili源码泄漏后,程序员们从代码里扒出来的彩蛋
昨天bilibili又上热搜了,被某人在github上开了个账号,传了份整个后端代码到github,这是被人扒光了衣服看个精光啊. 这件事情,作为程序员的我们除了调侃和fork的同时,想一想,造成这个 ...
- 剑指Spring源码(一)
Spring,相信每个Java开发都用过,而且是每天都在用,那强大又神秘的IoC,AOP,让我们的开发变得越来越简单,只需要一个注解搞定一切,但是它内部到底是什么样子的呢?跟着我,一起探究Spring ...
- 使用xUnit为.net core程序进行单元测试 -- Assert
第一部分: http://www.cnblogs.com/cgzl/p/8283610.html Assert Assert做什么?Assert基于代码的返回值.对象的最终状态.事件是否发生等情况来评 ...
- 编写基于Property-based的单元测试
编写基于Property-based的单元测试 作为一个开发者,你可能认为你的职责就是编写代码从而完成需求.我不敢苟同,开发者的工作是通过软件来解决现实需求,编写代码只是软件开发的其中一个方面,编写可 ...
- leetcode — single-number-ii
/** * Source : https://oj.leetcode.com/problems/single-number-ii/ * * Given an array of integers, ev ...
- javascript入门篇(一)
未定义:undefined 布尔类型值:true,false 判断类型:typeof() 绝对值:Math.abs(-1) 声明常量:const 声明变量:var 小数两值互换如果出现问题,可以通 ...
- kubernetes系列05—kubectl应用快速入门
本文收录在容器技术学习系列文章总目录 1.使用kubectl 1.1 介绍 kubectl用于运行Kubernetes集群命令的管理工具. 1.2 语法 kubectl [command] [TYPE ...
- Linux常用命令详解(week1_day1_1)--技术流ken
本节内容 基础命令:lsmanpwdcdmkdirechotouchcpmvrmrmdircatmorelessheadtailclearpoweroffreboot进阶命令(下一章节):aliasu ...
- Java Socket通信实现私聊、群聊
前言 闲言少叙,上代码! 代码编写 server服务端 /** * 服务端 */ public class Server { private static ServerSocket server = ...