一、GTID的简介

1.GTID的概述

、全局事物标识:global transaction identifieds。
、GTID事物是全局唯一性的,且一个事务对应一个GTID。
、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。
、GTID用来代替classic的复制方法,不在使用binlog+pos开启复制。而是使用master_auto_postion=1的方式自动匹配GTID断点进行复制。
、MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。
、在传统的slave端,binlog是不用开启的,但是在GTID中,slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。

2.GTID的组成部分

前面是server_uuid:后面是一个序列号
例如:server_uuid:sequence number
7800a22c-95ae-11e4-983d-080027de205a:
UUID:每个mysql实例的唯一ID,由于会传递到slave,所以也可以理解为源ID。
Sequence number:在每台MySQL服务器上都是从1开始自增长的序列,一个数值对应一个事务。

3.GTID比传统复制的优势

、更简单的实现failover,不用以前那样在需要找log_file和log_Pos。特别是对运维人员来说应该是一件大喜的事情,在主从切换后,在传统的方式里,你需要找到binlog和POS点,然后change master to指向,
而不是很有经验的运维,往往会将其找错,造成主从同步复制报错,在mysql5.6里,你无须再知道binlog和POS点,你只需要知道master的IP、端口,账号密码即可,因为同步复制是自动的,mysql通过内部机制GTID自动找点同步。
、更简单的搭建主从复制。
、比传统复制更加安全。
、GTID是连续没有空洞的,因此主从库出现数据冲突时,可以用添加空事物的方式进行跳过。

4.GTID的工作原理

、master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
、slave端的i/o 线程将变更的binlog,写入到本地的relay log中。
、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。
、如果有记录,说明该GTID的事务已经执行,slave会忽略。
、如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。
、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描

二、配置GTID

1.环境准备

.操作系统:centos 6.6 x86_64
.MySQL版本:5.6. MySQL Community Server(建议使用mysql-5.6.10以上的版本)
.关闭防火墙与SELinux
.时间同步
.服务器:
master:192.168.1.11
slave :192.168.1.12

 2.修改主从my.cnf增加GTID支持

要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项:

binlog-format:二进制日志的格式,有row、statement和mixed几种类型;
需要注意的是:当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;
log-slave-updates、gtid-mode、enforce-gtid-consistency、report-port和report-host:用于启动GTID及满足附属的其它需求;
master-info-repository和relay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;
sync-master-info:启用之可确保无信息丢失;
slave-paralles-workers:设定从服务器的SQL线程数;0表示关闭多线程复制功能;
binlog-checksum、master-verify-checksum和slave-sql-verify-checksum:启用复制有关的所有校验功能;
binlog-rows-query-log-events:启用之可用于在二进制日志记录事件相关的信息,可降低故障排除的复杂度;
log-bin:启用二进制日志,这是保证复制功能的基本前提;
server-id:同一个复制拓扑中的所有服务器的id号必须惟一;

master配置:

在 [mysqld] 加入如下:

binlog-format=ROW        # 设置二进制日志格式,
log-slave-updates=true #是否记录从服务器同步数据动作
gtid-mode=on #启用Gtid模式
enforce-gtid-consistency=true #是否强制GTID的一致性
master-info-repository=TABLE #master信息的记录位置
relay-log-info-repository=TABLE #中继日志信息的记录位置
sync-master-info= #启用之可确保无信息丢失
slave-parallel-workers= #设置从服务器复制线程数
binlog-checksum=CRC32 #设置binlog校验算法(循环冗余校验码)
master-verify-checksum= #设置主服务器是否校验
slave-sql-verify-checksum= #设置从服务器是否校验
binlog-rows-query-log_events=
server-id=
report-port=
report-host=192.168.1.11 #设置报告给哪台服务器,一般设置为本机的主机名。

在Slave服务器上安装MySQL与在Master服务器上安装方法相同,这里不在介绍,而在Slave服务器上安装Mysql有两个参数与Master服务器不同。如下:

 server-id=
report-host=192.168.1.12

重启MySQL服务

2.在Master服务器上为Slave创建复制用户

mysql> grant replication slave,replication client on *.* to 'replication'@'192.168.1.%' identified by '';
Query OK, rows affected (0.15 sec) mysql> flush privileges;
Query OK, rows affected (0.06 sec)

3.配置master只读锁,查看二进制日志位置

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, rows affected (0.10 sec) mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin. | | | | e9598c9e-f605-11e7-9c77-000c29c24776:- |
+------------------+----------+--------------+------------------+------------------------------------------+
row in set (0.04 sec)

4.进行数据库备份并复制到slave上,不要关闭这个mysql进程连接,避免锁失效,我们另起一个ssh连接master服务器:

[root@localhost ~]# mysqldump --single-transaction --master-data= --all-databases --triggers --routines --events  > /tmp/database-backup.sql
[root@localhost ~]# scp /tmp/database-backup.sql 192.168.1.12:/root

5.回到刚才mysql进程,进行解锁

mysql> UNLOCK TABLES;
Query OK, rows affected (0.05 sec)

6.导入sql文件,并刷新权限:

[root@localhost ~]# mysql < database-backup.sql
[root@localhost ~]# mysql -e "FLUSH PRIVILEGES;"

7.slave上将master设置为主服务器

mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.11',MASTER_USER='replication',MASTER_PASSWORD='',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=;
Query OK, rows affected, warnings (0.17 sec) mysql> start slave;
Query OK, rows affected, warning (0.15 sec) mysql> show slave status\G
*************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.11
Master_User: replication
Master_Port:
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos:
Relay_Log_File: relay-log.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.........................
......................略
Master_Server_Id:
Master_UUID: e9598c9e-f605-11e7-9c77-000c29c24776
Master_Info_File: mysql.slave_master_info
SQL_Delay:
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count:
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 826b1c09-f608-11e7-9c88-000c29e543b4:,
e9598c9e-f605-11e7-9c77-000c29c24776:-
Auto_Position:
row in set (0.00 sec)

8.在主服务器上查看从服务器信息:

mysql> show slave hosts;
+-----------+--------------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID |
+-----------+--------------+------+-----------+--------------------------------------+
| | 192.168.1.12 | | | 826b1c09-f608-11e7-9c88-000c29e543b4 |
+-----------+--------------+------+-----------+--------------------------------------+
row in set (0.00 sec)

配置MySQL GTID(Global Transaction IDs)复制的更多相关文章

  1. 搞懂MySQL GTID原理

    从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式.通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID.这种方式强化了数据库的主备一致性,故障恢复以及容错能力. GT ...

  2. Mysql主从复制、半同步复制、并行复制

    MySQL之间数据复制的基础是二进制日志文件(binary log file).一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以"事件"的方 ...

  3. MySQL GTID 错误处理汇总

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

  4. MySQL5.7配置基于GTID的复制

    MySQL5.7下配置GTID复制的方法: 修改主库和从库的配置文件,加入下列部分的配置项:主库:[mysqld]log-bin=mysql-binbinlog_format= ROWgtid-mod ...

  5. 5.7 并行复制配置 基于GTID 搭建中从 基于GTID的备份与恢复,同步中断处理

    5.7 并行复制配置 基于GTID 搭建中从 基于GTID的备份与恢复,同步中断处理 这个文章包含三个部分 1:gtid的多线程复制2:同步中断处理3:GTID的备份与恢复 下面文字相关的东西 大部分 ...

  6. MYSQL GTID 复制

    MySQL5.7以后都基本用GTID方式复制了,相对于binlog和position号方式,在failover时候减少很多人工切换操作 GTID,global transaction identiti ...

  7. MySQL GTIDs(global transaction identifiers)

    1.如何定义和生成GTIDs 唯一性:在所有主从库都是唯一的,由二元组构成 每个事务和GTIDs之间都有1:1映射 GTID = source_id:transaction_id source_id标 ...

  8. MySQL GTID复制Slave跳过错误事务Id以及复制排错问题总结

    GTID复制典型的复制错误有两种:1,数据对象级别的错误,包括主库上update的数据在从库上不存在,主从逐渐冲突,库表索引等对象的冲突等等,   如果是纯粹的跳过错误的话,这一类的错误需要跳过思路是 ...

  9. MySQL GTID复制

    什么是GTID 什么是GTID呢, 简而言之,就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能.GTID是事 ...

随机推荐

  1. linux修改文件所有者和文件所在组 【转载】

    chgrp  用户名    文件名  -R chown 用户名   文件名  -R -R表示递归目录下所有文件 以上部分已验证  地址原贴

  2. sql server 无法用sql server身份验证

    1)首先,用windows身份验证进入服务器. 2)其次找到安全性,点击进入后,找到登录名为sa,然后右击属性. 3)在属性中找到常规,然后检查下自己的账号和密码,并且在状态中将登陆状态改成启用,否则 ...

  3. 单页面应用(SPA)重新部署后,正在浏览的页面如何更新缓存?

    当单页面的系统在重新部署更新时,此时正在浏览网页,并且已经在网页内的用户,始终会使用老的js与css文件,一直在使用已经缓存了的静态资源. 所有的缓存问题焦点都在index.html上,只要index ...

  4. 关于Adaboost算法

    我花了将近一周的时间,才算搞懂了adaboost的原理.这根骨头终究还是被我啃下来了. Adaboost是boosting系的解决方案,类似的是bagging系,bagging系是另外一个话题,还没有 ...

  5. Java 笔试题(一)

    应聘Java笔试时可能出现问题及其答案  Java基础方面: 1.作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 ...

  6. 自然语言处理工具hanlp关键词提取图解TextRank算法

    看一个博主(亚当-adam)的关于hanlp关键词提取算法TextRank的文章,还是非常好的一篇实操经验分享,分享一下给各位需要的朋友一起学习一下! TextRank是在Google的PageRan ...

  7. 菜鸟如何使用hanlp做分词的过程记录

    菜鸟如何使用hanlp做分词的过程记录 最近在学习hanlp的内容,准备在节后看看有没有时间整理一波hanlp分享下,应该还是会像之前分享DKHadoop一样的方式吧.把整个学习的过程中截图在配文字的 ...

  8. thinkPHP 3.2.3操作MongoDB指南

    今天使用thinkPHP操作MongoDB发现跟用MYSQL有很多不同的地方,在这里特别跟大家分享下. 暂时没用thinkPHP5一直还在用thinkPHP3.2.3觉得挺好用,MongoDB版本2和 ...

  9. Azure IOT Edge

    微软Build 2017大会,纳德拉表示,在计算力的飞速发展中,微软要做的就是将计算的能力赋权给普通用户,让技术为更多用户所用,让计算机视觉.文本理解等技术变得更加普惠(inclusive),同时构建 ...

  10. GPIO实验

    一.目标:点亮led 1.看原理图:怎样点亮led 2.怎样GPF4输出0/1 a.配置功能  输出/输入/其他功能(中断或者其他) b.设置输出高电平/低电平 操作寄存器--->看芯片手册 A ...