GTID 基于事务ID复制

GTID的工作原理

1、master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
2、slave端的i/o 线程将变更的binlog,写入到本地的relay log中。
3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。
4、如果有记录,说明该GTID的事务已经执行,slave会忽略。
5、如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。

主从复制

环境:centos7

准备两台机器

master(主机)     10.0.0.131 
slave(从机)      10.0.0.130  

修改主机名

hostnamectl set-hostname 主机名

添加域名解析

可选项,可以不做
添加解析尽量两台机器都做解析

vim /etc/hosts
#添加如下
10.0.0.131 master
10.0.0.130 slave

关闭firewalld和selinux

systemctl stop firewalld
setenforce 0

确保时间date一致

下载并安装MySQL5.7(所有机器)

这里不做过多讲解

master配置

#修改配置文件
vim /etc/my.cnf 
———————————————————————————————————————————————————————————————————
[mysqld]
validate_password=off    #关闭强密码

log-bin=/var/lib/mysql/master    #配置binlog存放位置
server-id=1      #主机和从机id不能相同

gtid_mode=ON
enforce_gtid_consistency=1    
———————————————————————————————————————————————————————————————————       
#授权远程账户(先进入MySQL)
mysql> grant replication slave,super,reload on *.* to 用户名(slave)@'允许访问的IP(%)' identified by '密码(123)';

% 在MySQL5.7中是允许除了本地(localhost/127.0.0.1)之外所有的IP访问

slave配置

#修改配置文件
vim /etc/my.cnf
———————————————————————————————————————————————————————————————————       
[mysqld]
validate_password=off

log-bin=/var/lib/mysql/master
server-id=2      #主机和从机id不能相同

gtid_mode=ON
enforce_gtid_consistency=1  
———————————————————————————————————————————————————————————————————       

重启master和slave上的mysql

继续配置slave

mysql -u root -p'123'  

mysql > change master to master_host='主机IP(master)',master_user='用户名(slave)',master_password='密码(123)',master_auto_position=1;
mysql > start slave;                //启动slave角色
mysql > show slave status\G         //查看状态

测试

1.只要slave状态中i/o进程和sql进程为YES,基本可以确定成功
2.主服务器上写入数据,在从机服务器上查看,如果能在从机上看到数据,则成功!