GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 的mysql服务器上也是唯一的。正是因为这样一个特性使得mysql的主从复制变得更加简单,以及数据库一致性更可靠。

一、GTID的概念

  1. 1、全局事务标识:global transaction identifiers
  2. 2GTID是一个事务一一对应,并且全局唯一ID
  3. 3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。
  4. 4GTID用来代替传统复制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS开启复制。而是使用MASTER_AUTO_POSTION=1的方式开始复制。
  5. 5MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。
  6. 6、在传统的slave端,binlog是不用开启的,但是在GTIDslave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。

二、GTID的组成

  1. GTID = source_id:transaction_id
  2. source_id,用于鉴别原服务器,即mysql服务器唯一的的server_uuid,由于GTID会传递到slave,所以也可以理解为源ID
  3. transaction_id,为当前服务器上已提交事务的一个序列号,通常从1开始自增长的序列,一个数值对应一个事务。
  4. #示例:
  5. 3E11FA47-71CA-11E1-9E33-C80AA9429562:23
  6. 前面的一串为服务器的server_uuid,即3E11FA47-71CA-11E1-9E33-C80AA9429562,后面的23transaction_id

三、GTID的优势

  1. 1、更简单的实现failover,不用以前那样在需要找log_filelog_pos
  2. 2、更简单的搭建主从复制。
  3. 3、比传统的复制更加安全。
  4. 4GTID是连续的没有空洞的,保证数据的一致性,零丢失

四、GTID的工作原理

  1. 1、当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中。
  2. 2binlog传输到slave,并存储到slaverelaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值。
  3. 3sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID
  4. 4、如果有记录,说明该GTID的事务已经执行,slave会忽略。
  5. 5、如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog
  6. 在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。
  7. 6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。

五、配置GTID

  1. 对于GTID的配置,主要修改配置文件中与GTID特性相关的几个重要参数(建议使用mysql-5.6.5以上版本),如下:
  2. 1、主:
  3. [mysqld]
  4. #GTID:
  5. server_id=135 #服务器id
  6. gtid_mode=on #开启gtid模式
  7. enforce_gtid_consistency=on #强制gtid一致性,开启后对于特定create table不被支持
  8. #binlog
  9. log_bin=master-binlog
  10. log-slave-updates=1
  11. binlog_format=row #强烈建议,其他格式可能造成数据不一致
  12. #relay log
  13. skip_slave_start=1
  14. 2、从:
  15. [mysqld]
  16. #GTID:
  17. gtid_mode=on
  18. enforce_gtid_consistency=on
  19. server_id=143
  20. #binlog
  21. log-bin=slave-binlog
  22. log-slave-updates=1
  23. binlog_format=row #强烈建议,其他格式可能造成数据不一致
  24. #relay log
  25. skip_slave_start=1

六、配置基于GTID的复制

  1. 1、新配置的mysql服务器
  2. 对于新配置的mysql服务器,按本文第五点描述配置参数文件后,在slave端执行以下操作
  3. (root@localhost) [(none)]> CHANGE MASTER TO
  4. -> MASTER_HOST='192.168.1.135',
  5. -> MASTER_USER='repl',
  6. -> MASTER_PASSWORD='xxx',
  7. -> MASTER_PORT=3306,
  8. -> MASTER_AUTO_POSITION = 1;
  9. Query OK, 0 rows affected, 2 warnings (0.01 sec)
  10. (root@localhost) [(none)]> start slave;
  11. Query OK, 0 rows affected (0.01 sec)
  12. (root@localhost) [(none)]> show slave status \G ###可以看到复制工作已经开始且正常
  13. *************************** 1. row ***************************
  14. Slave_IO_State: Waiting for master to send event
  15. Master_Host: 192.168.1.135
  16. Master_User: repl
  17. Master_Port: 3306
  18. Connect_Retry: 60
  19. Master_Log_File: master-binlog.000001
  20. Read_Master_Log_Pos: 151
  21. Relay_Log_File: slave-relay-log.000002
  22. Relay_Log_Pos: 369
  23. Relay_Master_Log_File: master-binlog.000001
  24. Slave_IO_Running: Yes
  25. Slave_SQL_Running: Yes
  26. 2、已运行经典复制mysql服务器转向GTID复制
  27. a、按本文第五点描述配置参数文件;
  28. b、所有服务器设置global.read_only参数,等待主从服务器同步完毕;
  29. mysql> SET @@global.read_only = ON;
  30. c、依次重启主从服务器;
  31. d、使用change master 更新主从配置;
  32. mysql> CHANGE MASTER TO
  33. > MASTER_HOST = host,
  34. > MASTER_PORT = port,
  35. > MASTER_USER = user,
  36. > MASTER_PASSWORD = password,
  37. > MASTER_AUTO_POSITION = 1;
  38. e、从库开启复制
  39. mysql> START SLAVE;
  40. f、验证主从复制

基于GTID的MySQL主从复制#从原理到配置的更多相关文章

  1. 基于GTID模式MySQL主从复制

    基于GTID模式MySQL主从复制 GTID复制原理:基于GTID的复制是MySQL 5.6后新增的复制方式GTID (global transaction identifier) 即全局事务ID, ...

  2. MySQL主从复制的原理及配置

    [http://www.jb51.net/article/50053.htm]   MySQL 数据库的高可用性架构:         集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单 ...

  3. MySQL主从复制的原理及配置方法(比较详细)

    MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单介绍复制的原理及配置,以及一些常见的问题 一.复制的原理 MySQL 复制基于主服务 ...

  4. Mysql中主从复制的原理、配置过程以及实际案例

    Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6 ...

  5. MySQL主从复制异步原理以及搭建

    MySQL主从复制的原理: 1.首先,MySQL主库在事务提交时会把数据变更作为时间events记录在二进制日志文件binlog中:MySQL主库上的sync_binlog参数控制Binlog日志以什 ...

  6. 基于Docker的Mysql主从复制

    基于Docker的Mysql主从复制搭建 为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相 ...

  7. 15、mysql主从复制的原理

    mysql主从复制 要想实现mysql的主从复制需要先了解二进制日志(bin log)和中继日志(relay log). 二进制日志(bin log) binlog即binary log,二进制日志文 ...

  8. MySQL主从复制的原理和注意事项都在这儿了!!

    写在前面 最近在写Mycat专题,由于不少小伙伴最近要出去面试,问我能不能简单写下MySQL的主从复制原理和注意事项,因为在之前的面试中被问到了这些问题.我:可以啊,安排上了!! 主从复制原理 (1) ...

  9. MySQL主从复制之Mycat简单配置和高可用

    什么是Mycat 1.Mycat就是MySQL Server,而Mycat后面连接的MySQL Server,就好象是MySQL的存储引擎,如InnoDB,MyISAM等.因此,Mycat本身并不存储 ...

随机推荐

  1. 文件读取方法(FileHelpers) z

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using FileHelp ...

  2. Windows平台,Oracle Database和Client并存方式

    由于某些特定需求,生产环境需要在同一台机器上同时安装Database Server和Client,因为plsql没有64位客户端,无法读取64位database的oci.dll文件,所以需要一个32位 ...

  3. Docker镜像提交命令commit的工作原理和使用方法

    在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 下面我们来动手实践. docker pull nginx:1.15.3 用命令行 ...

  4. Gecko Robotics, Inc. SE II Test OA -- 菜到扣脚

    There are three problems in hackrank. two sum http request to get title binary search (find first la ...

  5. OC 结构体

    void test() { // 这个机构只能在函数内部使用 // 定义一个名为Student的结构体类型 struct Student { int age; // 年龄 char *name; // ...

  6. 【转】JS模块化工具requirejs教程(一):初识requirejs

    随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...

  7. markdown的常用高级操作。

    符号 说明 对应编码(使用时去掉空格) 英文怎么说 & AND 符号 & amp; ampersand < 小于 & lt; little 大于 & gt; gr ...

  8. Angularjs实例应用

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  9. jdk下载安装

    1.下载地址:https://www.oracle.com 注册,登陆,选择版本下载(注意,下载时提示you must accept the license agreement before down ...

  10. iOS之性能的优化

    本文转自:http://m.blog.csdn.net/article/details?id=51638925 写在前面 本文来自iOS Tutorial Team 的 Marcelo Fabri,他 ...