开发者社区> 技术小阿哥> 正文

GTID的复制的搭建过程

简介:
+关注继续查看

1.什么是GTID?

GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号;

GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增;

#查看本数据库实例的uuid号:

root@localhost [(none)]>select @@server_uuid;

+--------------------------------------+

| @@server_uuid                |

+--------------------------------------+

| 83373570-fe03-11e6-bb0a-000c29c1b8a9 |

+--------------------------------------+


#也可以通过系统层面查看uudi:

[root@Darren2 data]# cat /data/mysql/mysql3306/data/auto.cnf

[auto]

server-uuid=83373570-fe03-11e6-bb0a-000c29c1b8a9


#linux中可以通过uuidgen产生随机uuid,mysql中可以通过select uuid()产生;

如:

[root@Darren2 ~]# uuidgen

eceac2d7-4878-429b-81ca-e6aea02b1739

root@localhost [(none)]>select uuid();

+--------------------------------------+

| uuid()                     |

+--------------------------------------+

| bc959381-1c89-11e7-8786-000c29c1b8a9 |

+--------------------------------------+


GTID的限制

(1)不支持非事物引擎

(2)不支持create table ... select语句复制(主库直接报错)

ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.

(3)不支持一个sql同时更新一个事物引擎和非事物引擎的表;

(4)在一个复制组中,必须要求统一开启GTID或是关闭GTID;

(5)开启GTID需要重启(5.7支持在线切换);

(6)开启GTID后就不再使用原来的传统的复制方式;

(7)对于create temporary table和drop temporary talbe语句不支持(不报错,但是也不存在表);

(8)不支持sql_slave_skip_counter;


2.环境配置


master slave
数据库版本 5.7.16 5.7.16
IP 192.168.91.18 192.168.91.20
serverid 330618 330620
端口号 3306 3306


3.配置文件参数设置

(1)master:

配置文件中设置:

server-id = 330618

binlog_format = row

log-bin = /data/mysql3306/logs/mysql-bin

#GTID

gtid_mode=on

enforce-gtid-consistency=on

(2)slave:

配置文件中设置:

server-id = 330620

binlog_format = row

relay-log=relay-bin

relay-log-index=relay-bin.index

read_only = on

#复制进程就不会随着数据库的启动而启动

skip_slave_start=1

#如果这个从库还有从库,需要开启这个参数

log_slave_updates=0

#GTID

gtid_mode=on

enforce-gtid-consistency=on


4.主库创建用户

master:

创建rep用户:

create user rep@'192.168.91.%' identified by '147258';

grant replication slave on *.* to rep@'192.168.91.%';

flush privileges;


5.备份还原初始化

(1)主库备份数据库:

mysqldump -uroot -p147258   --single-transaction --master-data=2 -A > /tmp/master.sql 

scp  master.sql  root@192.168.91.20:/tmp/

(2)把备份文件maser.sql,还原到slave:

mysql -uroot -p147258 < master.sql


#注意:

备份文件中有这么一条命令:

SET @@GLOBAL.GTID_PURGED='83373570-fe03-11e6-bb0a-000c29c1b8a9:1-10908';

在还原的时候使用,表示从库还原之后GTID就会达到10908,在10908之前的事物不需要同步过来,从10909开始同步事物;


6.从库 master to

(1)添加主库信息到从库slave:

    change master to

    master_host='192.168.91.18',

    master_port=3306,

    master_user='rep',

    master_password='147258',

    master_auto_position=1;

(2)启动从库

root@localhost [(none)]>start slave;

(3)查看主库信息

root@localhost [testdb]>show master status;

+------------------+----------+--------------+------------------+------------------------------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |

+------------------+----------+--------------+------------------+------------------------------------------+

| mysql-bin.000006 |     1120 |              |                  | f4b6894e-c7fd-11e6-aaf8-000c29aacb77:1-5 |

+------------------+----------+--------------+------------------+------------------------------------------+

(4)查看从库信息

root@localhost [(none)]>show slave hosts;

+-----------+------+------+-----------+--------------------------------------+

| Server_id | Host | Port | Master_id | Slave_UUID                           |

+-----------+------+------+-----------+--------------------------------------+

|    330621 |      | 3306 |    330618 | 5af344c7-c861-11e6-ad80-000c290f28e2 |

|    330620 |      | 3306 |    330618 | 31ba9bcb-c861-11e6-ad7f-000c29cc71ad |

+-----------+------+------+-----------+--------------------------------------+

(5)查看复制状态

slave:

root@localhost [testdb]>show slave status\G


7.测试

master:

root@localhost [(none)]>use testdb;

root@localhost [testdb]>create table t1(id int,name char(10));

root@localhost [testdb]>insert into t1 values(1,'aaa'),(2,'bbb');

slave:

root@localhost [testdb]>select * from t1;

+------+------+

| id   | name |

+------+------+

|    1 | aaa  |

|    2 | bbb  |

+------+------+




本文转自 Darren_Chen 51CTO博客,原文链接:http://blog.51cto.com/darrenmemos/1921190,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
20962 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
17441 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
30356 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
16701 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
23123 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
14144 0
13689
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载