实验环境准备:
两台rhel7.3版本的虚拟机
server1:ip为172.25.11.1 作为master
server2:ip为172.25.11.2 作为slave
自行准备好mysql压缩包
mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
解压并安装
tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-5.7.24-1.el7.x86_64.rpm mysql-community-libs-5.7.24-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm mysql-community-server-5.7.24-1.el7.x86_64.rpm
在server1:
编写配置文件作为master
vim /etc/my.cnf
在末尾加入:
server-id=1
log-bin=mysql-bin
在server2:
编写配置文件作为slave
vim /etc/my.cnf
在末尾加入:
server-id=2
server1和server2同时开启mysql并安全初始化
systemctl start mysqld
cat /car/log/mysqld.log | grep password ##查看mysql密码
mysql_secure_installation
在server1:
mysql -uroot
show databases;
grant replication slave on *.* to repl@'172.25.11.%' identified by 'Westos+001';
show master status; ##查看主从复制状态
在server2:
mysql -uroot
show databases;
change master to master_host='172.25.11.1',master_user='repl',master_password='Westos+001',master_log_file='mysql-bin.000002',master_log_pos=690;
start slave;
show slave status\G ##查看从服务器状态
Slave_IO_Running: Yes
Slave_SQL_Running: Yes ##这两个参数是Yes,表示成功
测试:
在server1上创建库并写入数据
mysql> create database westos; ##在server2上发现也能看到westos库
mysql> use westos
mysql> create table usertb (
-> username varchar(10) not null,
-> password varchar(15) not null); ##建表
mysql> desc usertb; ##查看表信息
mysql> insert into usertb values ('user1','123'); ##插入数据
mysql> select * from usertb; ##查看
在server2端:
show databases: ##查看在master新创建的库
select * from usertb;
由于同一事务的GTID在所有节点上的值一致,我们都不需要知道GTID的具体值,‘前提:需要做好前面的binlog复制’
在传统的复制里面,当发生故障,需要主从切换,需要找到binlog和pos点,然后将主节点指向新的主节点,相对来说比较麻烦,也容易出错。在MySQL 5.6里面,不用再找binlog和pos点,我们只需要知道主节点的ip,端口,以及账号密码就行,因为复制是自动的,MySQL会通过内部机制GTID自动找点同步
从服务器连接到主服务器之后,把自己执行过的GTID(Executed_Gtid_Set)
设置步骤:
在server1上:
编写配置文件并重启mysqld
vim /etc/my.cnf
server-id=1
log-bin=mysql-b
gtid_mode=ON
enforce-gtid-consistency=true
systemctl restart mysqld
在server2上:
编写配置文件并重启mysqld
cat /var/lib/mysql/relay-log.info
cat auto.cnf ##看到server1的uuid
vim /etc/my.cnf
server-id=2
gtid_mode=ON
enforce-gtid-consistency=true
systemctl restart mysqld
在server2登录数据库
cat relay-log.info #查看relay-log
mysql -uroot -pWestos+001
mysql> stop slave; ##关闭之前设定的基于ip的主从复制
mysql> CHANGE MASTER TO ##修改master信息
-> MASTER_HOST = '172.25.11.1',
-> MASTER_USER = 'repl',
-> MASTER_PASSWORD = 'Westos+001',
-> MASTER_AUTO_POSITION = 1; ##启用gtid,它是自动的
mysql> start slave;
mysql> show slave status\G ##查看状态,可以看到下面两个参数是空的
Retrieved_Gtid_Set:
Executed_Gtid_Set:
在server1端登录数据库并写入数据
mysql -uroot -pWestos+001
mysql> use westos;
mysql> insert into usertb values ('user2','123');
mysql> insert into usertb values ('user2','123');
在server2端查看
mysql> show slave status\G
Retrieved_Gtid_Set: f84e8de1-38a2-11e9-b78c-5254009afece:1-2
Executed_Gtid_Set: f84e8de1-38a2-11e9
b78c-5254009afece:1-2 ##发现这两个参数变了,从1位置开始复制的
mysql> use mysql #查看gtid模式复制的起始和结束位置
mysql> select * from gtid_executed;