Mysql的全同步复制(组复制)

一、mysql的全同步复制(组复制)的基础知识
复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事务
但所有读写(RW)事务只有在冲突检测成功后才会提交。只读(RO)事务不需要在冲突检测,可以立即提交。
MySQL 组复制提供了高可用性,高弹性,可靠的 MySQL 服务
但是组复制的效率很低
当master节点写数据的时候,会等待所有的slave节点完成数据的复制,然后才继续往下进行;组复制的每一个节点都可能是slave
二、搭建实验环境
实验环境:(一主多从模式),一个master节点+两个slave节点

主机名	       IP	            功能
server1  	172.25.254.1	  master节点
server2	    172.25.254.2      slave节点
server3	    172.25.254.3       slave节点

三、开始实现组复制(全同步)的操作流程
组复制(全同步复制)互相为master和slave;相当于一个集群,都可以作为master和slave;只需要在一个上面开启组复制即可,大家都是master。
在server1上配置
查看一下UUID备用,三个节点的uuid使用同一个值,而且不能与三个节点自身的uuid相同

/var/lib/mysql——>uuid

在这里插入图片描述

[root@server1 mysql]# vim /etc/my.cnf  编辑配置文件

在这里插入图片描述

vim /etc/mysql.cnf
先删掉之前实验加入的内容,然后加入下面的东西
server_id=1第一个节点
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE #关闭binlog校验
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW#组复制依赖基于行的复制格式

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="查出来的uuid"##可以看/var/lib/mysql/auto.cnf
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "172.25.254.1:33061"当前节点的ip
loose-group_replication_group_seeds="172.25.254.1:33061,172.25.254.2:33061,172.25.254.3:33061"
loose-group_replication_bootstrap_group=off
##插件是否自动引导,这个选项一般都要off掉,只需要由发起组复制的节点开启,并只启动一次,如果是on,下次再启动时,会生成一个同名的组,可能会发生脑裂
loose-group_replication_ip_whitelist="127.0.0.1,172.25.254.0/24"  白名单
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF
#后两行是开启多主模式的参数
cat /var/log/mysqld.log | grep password  查看临时密码

在这里插入图片描述
在server2上配置

[root@server2 ~]# vim /etc/my.cnf
[root@server2 ~]# cd /var/lib/mysql
[root@server2 mysql]# systemctl stop mysqld
[root@server2 mysql]# rm -rf *
[root@server2 mysql]# systemctl start mysqld
打开强制性连续检测,检测数据是否同步
loose-group_replication_enforce_update_everywhere_checks=ON

闭单住模式,所有节点都可作为master节点写入数据
loose-group_replication_single_primary_mode=OFF 

在这里插入图片描述

[root@server2 mysql]# cat /var/log/mysqld.log | grep password
mysql> alter user root@localhost identified by 'aSD+1-3F=1*';修改密码就可以查看

在这里插入图片描述
在这里插入图片描述
在server1上配置

[root@server1 mysql]# mysql -uroot -paSD+1-3F=1*
#关闭二进制日志,禁止数据上传到其他主机,导致数据不同步,因为其他主机都可能做为主节点
mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)
#创建用户rpl_user,更改密码
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'aSD+1-3F=1*';
Query OK, 0 rows affected (0.00 sec)
#授权所有库的所有表到此用户
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.01 sec)
#刷新表格
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
#再次打开二进制日志
mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)
#使用组复制插件指向到插件
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='aSD+1-3F=1*' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.03 sec)
#安装组复制插件,报错显示已经安装
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
ERROR 1125 (HY000): Function 'group_replication' already exists
#发起组复制(只能在一个节点上开启当前在server1开启,也可以在其他主机)打开
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)
#启动
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.71 sec)
#关闭(若一直打开,每次都会生成不同的组名,产生混乱)
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)
#查看组复制的成员(必须三台主机有解析,根据主机名来识别)
mysql> SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述server1添加数据进行测试
在这里插入图片描述
添加server2/3两个节点

mysql> stop group_replication; 先关闭组复制
mysql> set global group_replication_allow_local_disjoint_gtids_join=on  打开参数
mysql> start group_replication;  在开启组复制

server2在这里插入图片描述
server3
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:在server3添加数据,其他server1、2也可以看到
可以在任意一个节点写数据,其他两个节点会进行组复制
server3添加数据在这里插入图片描述
server1、2也可以看到
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值