MySQL GTID 系列之一

一.GTID相关概念

GTID:全局事务标识符,MySQL5.6版本开始在主从复制中推出的重量级特性。

每提交一个事务,当前执行线程都会拿到一个给定复制环境中唯一的GTID,

GTID的格式如下:

GTID = source_id:sequence_id
sourceid:主服务器的唯一标识,通常用server_uuid来表示。
sequence_id:事务提交时由系统顺序分配的序列号,在Binlog中是递增且连续有序。 show master status \G

1.1 GTID生命周期

1.MASTER产生GTID,保存到Binlog中。
2.发送Binlog到SLAVE,保存到Relay Log
3.SQL线程从Relay Log中获取GTID,并设置为gtid_next,然后对比SLAVE端的Binlog是否有记录。
4.如果有记录,说明该GTID的事务已经执行,SLAVE会忽略。
5.如果没有记录,SLAVE就会从Relay Log中执行该GTID的事务,并记录到Binlog。
6.SLAVE不生成GTID

1.2 GTID的优点

1.一个事务对应一个唯一ID,一个GTID在一个服务器上只会执行一次
2.GTID是用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置
3.减少手工干预和降低服务故障时间,当主机挂了之后通过软件从众多的备机中提升一台备机为主机

二.搭建GTID主从

2.1相关参数说明

server_id: 跟传统的主从一样,每个实例不能一样
gtid_mode: 设置为ON,开启GTID模式
enforce_gtid_consistency:设置为ON,保证GTID一致性
log_bin: 跟传统的主从一样必须打开
log_slave_updates:建议开启 可以用来级联复制
binlog_format:强烈建议设置为ROW,否则会造成数据不一致
#skip-slave-start:设置为1,SLAVE启动时,不自动开启复制

2.2开启GTID

MySQL5.7.6之前,如果数据库已经启动,必须重启数据库。具体步骤如下:

1.关闭MASTER的写入
2.SLAVE设置参数 skip-slave-start=1,避免SLAVE启动后,继续使用传统的复制模式。
3.按照上节所述,所有MySQL实例修改配置,开启GTID模式
4.重启所有MySQL数据库

MySQL5.7.6之后,可以在线调整,再无须重启了。

2.3搭建主从

分三种情况:

a.MASTER新搭建,直接利用CHANGE MASTER;
CHANGE MASTER TO MASTER_HOST='***',
MASTER_PORT=*** ,
MASTER_USER='***',
MASTER_PASSWORD='***',
MASTER_AUTO_POSITION=1;
b.MASTER运行不久,Binlog保留完整,直接利用CHANGE MASTER,如果数据量比较大,同步时间则太长,并且有可能导致网络压力大;
c.MASTER有大量数据,原始的Binlog可能删除

环境

CENTOS 7.2
MySQL5.7.22

1.下载安装xtrabackup

#下载XtraBackup
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm #安装所需包
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL rsync perl-Digest-MD5 libev #安装XtraBackup
rpm -ivh percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

2.所有MySQL修改配置,可以在线修改,同时修改配置文件,以便下次生效

server_id =101/102
gtid_mode=ON
enforce_gtid_consistency=ON
log_bin=ON
log_slave_updates=ON
binlog_format=ROW
#skip_slave_start=1

3.备份数据库,获取MASTER数据以及GTID范围

#因为主库才开启GTID,模拟一些事务,使其产生一些binlog
create table test(id int);
insert into test (id)values(1),(2) #备份数据
innobackupex --user=root --password=root --port=3306 /MySQL/my3306/data/fullbackup/ #查看gtid范围
[root@localhost 2018-07-26_23-23-00]# cat xtrabackup_binlog_info
binlog.000012 579 9760cb92-693e-11e8-85bf-000c29b55cf0:1-2

4.COPY备份数据到SLAVE,搭建SLAVE实例

#COPY数据
scp -r 2018-07-26_23-23-00 root@192.168.2.138:/MySQL/my3306/fullbackup/ #停止SLAVE
service mysqld stop #从库将原有数据文件夹重命名到新位置,并创建原文件夹
mv /MySQL/my3306/data /MySQL/my3306/databak
mkdir -p /MySQL/my3306/data #innobackupex apply-log
innobackupex --apply-log --user=root --password=root --port=3606 /MySQL/my3306/fullbackup/2018-07-26_23-23-00/ #innobackupex copy 恢复的文件到原来的数据位置
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /MySQL/my3306/fullbackup/2018-07-26_23-23-00/ #给目录并赋权
chown -R mysql:mysql /MySQL/my3306/data

5.建立同步用户,跳过GTID,搭建主从

#主从库建立同步用户
grant replication slave,replication client on *.* to 'rep'@'%' identified by 'rep'; #启动SLAVE实例,设置gtid_purged的值,跳过GTID范围
service mysqld start SET @@GLOBAL.GTID_PURGED='9760cb92-693e-11e8-85bf-000c29b55cf0:1-2' #利用CHANGE MASTER语句,配置主从复制 CHANGE MASTER TO MASTER_HOST='192.168.2.144',
MASTER_PORT=3306 ,
MASTER_USER='rep',
MASTER_PASSWORD='rep',
MASTER_AUTO_POSITION=1; #启动SLAVE复制,SLAVE会自动跳过GTID范围,拉取最新的GTID信息
START SLAVE; #查看主从情况
SHOW SLAVE STATUS \G

6.验证主从同步

mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.144
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000012
Read_Master_Log_Pos: 1561
Relay_Log_File: relaylog.000002
Relay_Log_Pos: 1387
Relay_Master_Log_File: binlog.000012
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1561
Relay_Log_Space: 1587
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 101
Master_UUID: 9760cb92-693e-11e8-85bf-000c29b55cf0
Master_Info_File: /MySQL/my3306/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 9760cb92-693e-11e8-85bf-000c29b55cf0:3-6
Executed_Gtid_Set: 9760cb92-693e-11e8-85bf-000c29b55cf0:1-6
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)

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

  1. MySQL GTID 错误处理汇总

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

  2. MySQL GTID你知多少【转】

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

  3. MySQL GTID (二)

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

  4. mysql gtid 主从复制

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

  5. MYSQL GTID position

    MySQL5.6 新特性之GTID - jyzhou - 博客园 http://www.cnblogs.com/zhoujinyi/p/4717951.html MySQL · 答疑释惑 · GTID ...

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

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

  7. MySQL GTID你知多少

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

  8. mysql GTID主从配置

    主数据库配置 [mysqld] server_id=1 gtid_mode=on enforce_gtid_consistency=on skip_slave_start=1log_bin=maste ...

  9. MySQL GTID复制错误处理之跳过错误

    某Slave报错信息: mysql> show slave status\G; mysql> show slave status\G; ************************** ...

随机推荐

  1. UVA-10801 Lift Hopping (最短路)

    题目大意及分析:一道简单的最短路...好几天没写程序了,憋得难受!!! 代码如下: # include<iostream> # include<cstdio> # includ ...

  2. 个人知识管理系统Version1.0开发记录(12)

    最近碰到个问题,在五个工作日内阅读一个百万行左右代码量的新项目集合,如何解决呢? 第一个工作日,环境观察.待在那个项目组,看项目成员们在做些什么事情,开发,测试,聊天,或多或少可以收集到一些项目相关的 ...

  3. LeetCode 47

    class Solution { public: vector<vector<int>> permuteUnique(vector<int>& nums) ...

  4. 本地Jdev Run PG报严重: Socket accept failed错误

    严重: Socket accept failed java.net.SocketException: select failed at java.net.PlainSocketImpl.socketA ...

  5. CF1082D:Maximum Diameter Graph (简单构造)

    Graph constructive problems are back! This time the graph you are asked to build should match the fo ...

  6. MAC远程桌面连接问题

    如图,始终提示“证书或相关链无效.” 点击“取消” 点击“编辑连接...” 点击“打开” 点击“安全性” 选择“即使验证失败,也始终连接” OK

  7. 浅谈SQL Server---1

    浅谈SQL Server优化要点 https://www.cnblogs.com/wangjiming/p/10123887.html 1.SQL Server 体系结构由哪几部分组成? 2.SQL ...

  8. Convex 一道阿姆斯特朗回旋好题

    2001年5月8日,阿姆斯特朗(Armstrong, 1929-2013) 教授发明了一种名为“阿姆斯特朗回旋加速喷气式阿姆斯特朗加密”的加密算法,算法从未公开,直至2013阿姆斯特朗教授逝世后,其生 ...

  9. 机器学习The Learning Problem——coursera简要总结

    1.人类及动物的学习模式:观察->学习->技能 机器学习的模式:data->ML(机器学习)->skill 2.那什么是skill:技能是某种表现方法的增进   eg:stac ...

  10. 在Eclipse中搭建Python开发环境

    在Eclipse中搭建Python开发环境 来自: http://hi.baidu.com/hqwfreefly/blog/item/2543181d0afd9604314e150e.html 前言 ...