MySQL主从GTID 基于事务ID复制

1、什么是GTID?

全局事务标识:global transaction identifiers
是用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置。

2、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。

3、部署主从复制

1、准备环境两台机器,关闭防火墙和selinux。—两台机器环境必须一致。时间也得一致

192.168.8.12 mysql-master
192.168.8.13 mysql-slave

两台机器安装mysql5.7
[root@mysql-master ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
[root@mysql-master ~]# yum install -y mysql-community-server --nogpgcheck --disablerepo mysql80-community --enablerepo mysql57-community
[root@mysql-master ~]# systemctl start mysqld
[root@mysql-master ~]# systemctl enable mysqld
[root@mysql-master ~]# netstat -lntp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      11669/mysqld
[root@mysql-slave ~]# netstat -lntp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      11804/mysqld

配置并修改密码
master操作:
[root@mysql-master ~]# vim /etc/my.cnf   #在[mysqld]下添加如下内容
server-id=1   #定义server id master必写 
log-bin = mylog #开启binlog日志,master比写
gtid_mode = ON    #开启gtid
enforce_gtid_consistency=1   #强制gtid
[root@mysql-master ~]# systemctl restart mysqld   #重启
# 主服务器创建账户:
mysql> grant replication  slave,reload,super on *.*  to 'slave'@'%' identified by 'Qwer@123';
#注:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成slave的ip
mysql> flush privileges;

# 注意:如果不成功删除以前的binlog日志
replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
super权限:允许用户使用修改全局变量的SET语句以及CHANGE  MASTER语句
reload权限:必须拥有reload权限,才可以执行flush  [tables | logs | privileges]
slave操作:
[root@mysql-slave ~]# vim /etc/my.cnf  #添加如下配置
server-id=2
gtid_mode = ON
enforce_gtid_consistency=1
[root@mysql-slave ~]# systemctl restart mysqld
[root@mysql-slave ~]# mysql -uroot -p'Qwer@123'   #登陆mysql
mysql> change master to
master_host='master1',      #主ip 地址(192.168.8.12 )
master_user='授权用户',      #主服务上面创建的用户(slave)
master_password='授权密码', 	#Qwer@123
master_auto_position=1;
-> ;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
-- 启动slave角色
mysql> start slave;   
Query OK, 0 rows affected (0.00 sec)

-- 查看状态,验证sql和IO是不是yes。
mysql> show slave status\G  

你可能感兴趣的:(mysql,数据库,linux)