|
一、MGR介绍
- MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解 决方案,MySQL组复制是一个MySQL Server插件,使您可以创建弹性的,高可用性的,容错的复制拓 扑。。MGR基于分布式paxos协议,实现组复制,保证数据一致性。内置故障检测和自动选主功能,只 要不是集群中的大多数节点都宕机,就可以继续正常工作。提供单主模式与多主模式,多主模式支持多 点写入。
- MySQL组复制为分布式状态机复制提供了服务器之间的强大协调。服务器属于同一组时,它们会自动进 行协调。该组可以在具有自动主库选举的单主模式下运行,其中一次仅一个服务器接受更新。或者,对 于更高级的用户,可以在多主模式下部署组,在该模式下,所有服务器都可以接受更新,即使它们是同 时发布的。这种功能的代价是应用程序必须解决此类部署所施加的限制。
- 有一个内置的组成员资格服务,可以使组的视图一致,并且在任何给定时间点均可用于所有服务器。服 务器可以离开并加入该组,视图将相应更新。有时服务器可能会意外离开该组,在这种情况下,故障检 测机制会检测到此情况并通知该组视图已更改,这都是自动的。
- 对于要提交的事务,组的大多数必须在全局事务顺序中就给定事务的顺序达成一致。每个服务器分别决 定提交或中止事务,但所有服务器都要做出相同的决定。如果存在网络分区,分裂导致成员无法达成一 致,则系统将不会继续运行,直到解决此问题。因此,还有一个内置的自动裂脑保护机制。
- 所有这些都由提供的组通信系统(GCS,Group Communication System)协议提供支持。其提供故障 检测机制、组成员资格服务、安全以及有序的消息传递。所有这些属性是创建系统的关键,该系统可确 保在服务器组之间数据的一致性复制。该技术的核心是Paxos算法的实现。它充当组通信引擎。
二、组复制背景
主从复制
传统的MySQL复制提供了一种简单的主从复制方法。有一个主服务器(主服务器),有一个或多个辅助 服务器(从服务器)。主数据库执行事务,将其提交,然后将它们稍后(因此异步)发送给从数据库, 以重新执行(在基于语句的复制中)或应用(在基于行的复制中)。它是无共享系统,默认情况下所有 服务器均具有数据的完整副本。

半同步复制,它向协议增加了一个同步步骤。这意味着主服务器在提交时等待辅助服务器确认已接收到 事务。只有这样,主服务器才会恢复提交操作


1.2组复制
单主模式
- 可以使用group_replication_set_as_primary()指定特定成员作为新的主数据库(MySQL 8.0.13或 更高版本)
- 如果自动选举,考虑的第一个因素是哪个或哪些成员运行最低的MySQL Server版本;
- 考虑的第二个因素是每个成员的成员权重,具体由group_replication_member_weight 系统变量 指定;
- 考虑的第三个因素是每个成员所生成的服务器UUID的字典顺序,由server_uuid系统变量指定,服 务器UUID最低的成员被选为主服务器
多主模式
在mysql多主模式下,在组复制中通过Group Replication Protocol协议及Paxos协议,形成的整体高可用 解决方案 同时增加了certify的概念,负责检查事务是否允许提交,是否与其它事务存在冲突,Group Replication是由多个节点共同组成一个数据库集群,每个节点都可以单独执行事务,但是readwrite(rw)的操作只有在组内验证后才可以commit,Read-only (RO)事务是不需要验证可以立即执 行,当一个事务在一个节点上提交之前,会在组内自动进行原子性的广播,告知其他节点变更了什么内 容/执行了什么事务,然后为该事务建立一个全局的排序,最终,这意味着所有的服务器都以相同的顺 序接收相同的事务集。因此,所有服务器都按照相同的顺序应用相同的变更集,因此它们在组中保持一 致。 在多主模式下,该组的所有成员都设置为读写模式,在多主模式下,不支持SERIALIZABLE事务隔 离级别,且不能完全支持级联外键约束。
组复制体系架构

配置MGR单主模式
一、实验环境介绍

二、实验需求
- 配置MGR单主模式
- master主机为主服务器,提供写操作;
- 另外2台为从服务器,提供读操作
三、实验基础环境搭建
1.配置静态IP地址和DNS主机名解析
[root@yichen-master ~]# ip addr show ens33| grep 'inet '
inet 192.168.150.20/24 brd 192.168.150.255 scope global noprefixroute ens33
[root@yichen-slave1 ~]# ip addr show ens33| grep 'inet '
inet 192.168.150.21/24 brd 192.168.150.255 scope global noprefixroute ens33
[root@yichen-slave2 ~]# ip addr show ens33| grep 'inet '
inet 192.168.150.22/24 brd 192.168.150.255 scope global noprefixroute ens33
[root@yichen-master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.150.20 yichen-master
192.168.150.21 yichen-slave1
192.168.150.22 yichen-slave2
[root@yichen-slave1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.150.20 yichen-master
192.168.150.21 yichen-slave1
192.168.150.22 yichen-slave2
[root@yichen-slave2 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.150.20 yichen-master
192.168.150.21 yichen-slave1
192.168.150.22 yichen-slave22.建立SSH免秘钥登录环境(三台都要配置)
[root@yichen-master ~]# vim ssh-copy.sh
[root@yichen-master ~]# chmod a+x ssh-copy.sh
[root@yichen-master ~]# vim check-ssh.sh
[root@yichen-master ~]# chmod a+x check-ssh.sh
[root@yichen-master ~]# cat ssh-copy.sh
#!/usr/bin/bash
for i in 20 21 22
do
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.150.$i
done
[root@yichen-master ~]# cat check-ssh.sh
#!/usr/bin/bash
for i in 20 21 22
do
ssh 192.168.150.$i hostname
done
# 把两个脚本传到另外两台的slave上,并执行。
[root@yichen-master ~]# scp ssh-copy.sh check-ssh.sh root@192.168.150.21:/root
ssh-copy.sh 100% 104 79.3KB/s 00:00
check-ssh.sh 100% 77 48.0KB/s 00:00
[root@yichen-master ~]# scp ssh-copy.sh check-ssh.sh root@192.168.150.22:/root
ssh-copy.sh 100% 104 68.7KB/s 00:00
check-ssh.sh 100% 77 111.2KB/s 00:00 3.防火墙放行服务,和端口(三台都要放行)
[root@yichen-master ~]# firewall-cmd --add-service=mysql --permanent
success
[root@yichen-master ~]# firewall-cmd --add-port=3306/tcp --permanent
success
[root@yichen-master ~]# firewall-cmd --add-port=33060/tcp --permanent
success
[root@yichen-master ~]# firewall-cmd --add-port=33061/tcp --permanent
success
[root@yichen-master ~]# firewall-cmd --reload
success
[root@yichen-master ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client mysql
ports: 5000/tcp 3306/tcp 33060/tcp 33061/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@yichen-slave1 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client mysql
ports: 5000/tcp 3306/tcp 33060/tcp 33061/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@yichen-slave2 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client mysql
ports: 5000/tcp 3306/tcp 33060/tcp 33061/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules: 4.UUID必须不一样
[root@yichen-master ~]# cat /data/mysql/auto.cnf
[auto]
server-uuid=043887ba-5ce8-11ea-8f3a-000c29d3fc7e
[root@yichen-slave1 ~]# cat /data/mysql/auto.cnf
[auto]
server-uuid=96a3aeca-5f5e-11ea-9547-000c29035817
[root@yichen-slave2 ~]# cat /data/mysql/auto.cnf
[auto]
server-uuid=c5b69329-5f5e-11ea-ad3f-000c292c59725.关闭SElinux
[root@yichen-master ~]# cat /etc/sysconfig/selinux | grep SELINUX=
# SELINUX= can take one of these three values:
SELINUX=disabled
[root@yichen-slave1 ~]# cat /etc/sysconfig/selinux | grep 'SELINUX='
# SELINUX= can take one of these three values:
SELINUX=disabled
[root@yichen-slave2 ~]# cat /etc/sysconfig/selinux | grep 'SELINUX='
# SELINUX= can take one of these three values:
SELINUX=disabled四、部署MGR单主模式
master
1.修改master的主配置文件
[root@yichen-master ~]# mysql -uroot -pCom.wang123 -e "SELECT UUID()"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------------------------+
| UUID() |
+--------------------------------------+
| 36da6754-5f66-11ea-ad1b-000c29ac9351 |
+--------------------------------------+
[root@yichen-master ~]# cat /data/mysql/auto.cnf
[auto]
server-uuid=043887ba-5ce8-11ea-8f3a-000c29d3fc7e
[root@yichen-master ~]# systemctl restart mysqld
[root@yichen-master ~]# cat /data/mysql/auto.cnf
[auto]
server-uuid=043887ba-5ce8-11ea-8f3a-000c29d3fc7e
[root@yichen-master ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=20
log_bin=/data/mysql/master
log_bin_index=/data/mysql/master/master.index
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
plugin_load_add='group_replication.so'
group_replication_group_name="36da6754-5f66-11ea-ad1b-000c29ac9351"
group_replication_start_on_boot=off
group_replication_local_address= "192.168.150.20:33061"
group_replication_group_seeds= "192.168.150.20:33061,192.168.150.21:33061,192.168.150.22:33061"
group_replication_bootstrap_group=off #不随系统自启而启动
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
## 重启服务
[root@yichen-master mysql]# systemctl restart mysqld 2.创建用于分布式恢复的复制用户
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
mysql> create user mgr_user@'%' identified with mysql_native_password by 'Com.123456';
Query OK, 0 rows affected (0.00 sec)
#授权用于复制
mysql> grant replication slave on *.* to 'mgr_user'@'%';
Query OK, 0 rows affected (0.00 sec)
#授权用于在捐赠者上的克隆操作
mysql> grant backup_admin on *.* to 'mgr_user'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)
# 创建用户后,使用CHANGE MASTER TO语句将服务器配置为通过分布式恢复或远程克隆操作,使用给 定凭据进行状态传输。
mysql> change master to master_user='mgr_user', master_password='Com.123456' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.21 sec)3.启动组复制
mysql> SHOW PLUGINS;
+---------------------------------+----------+--------------------+----------------------+---------+
| Name | Status | Type | Library | License |
+---------------------------------+----------+--------------------+----------------------+---------+
| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
+---------------------------------+----------+--------------------+----------------------+---------+
1 rows in set (0.00 sec)
mysql> use mysql;
mysql> select user,host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| mgr_user | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
mysql> 4.自举启动组
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 (3.21 sec)
# 检查组信息及组成员
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 043887ba-5ce8-11ea-8f3a-000c29d3fc7e | yichen-master | 3306 | ONLINE | PRIMARY | 8.0.19 |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
1 row in set (0.00 sec)
# 为了证明服务器确实在一个组中并且能够处理负载,创建一个表并向其中添加一些内容。
mysql> CREATE DATABASE t;
Query OK, 1 row affected (0.00 sec)
mysql> use t;
Database changed
mysql> CREATE TABLE t1 (id INT PRIMARY KEY, name TEXT NOT NULL);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t1 VALUES (1, 'lisi');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO t1 VALUES (2, 'wangwu');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO t1 VALUES (3, 'tom');
Query OK, 1 row affected (0.01 sec)
# 查看表的内容及二进制日志
mysql> select *from t1;
+----+--------+
| id | name |
+----+--------+
| 1 | lisi |
| 2 | wangwu |
| 3 | tom |
+----+--------+
3 rows in set (0.00 sec)
mysql> show master status;
+---------------+----------+--------------+------------------+----------------------------------------------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+----------------------------------------------------------------------------------+
| master.000006 | 1347 | | | 043887ba-5ce8-11ea-8f3a-000c29d3fc7e:1-5,
36da6754-5f66-11ea-ad1b-000c29ac9351:1 |
+---------------+----------+--------------+------------------+----------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show binlog events in 'master.000006' limit 5;
+---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| master.000006 | 4 | Format_desc | 20 | 124 | Server ver: 8.0.19, Binlog ver: 4 |
| master.000006 | 124 | Previous_gtids | 20 | 191 | 36da6754-5f66-11ea-ad1b-000c29ac9351:1 |
| master.000006 | 191 | Gtid | 20 | 264 | SET @@SESSION.GTID_NEXT= '043887ba-5ce8-11ea-8f3a-000c29d3fc7e:1' |
| master.000006 | 264 | Query | 20 | 359 | CREATE DATABASE t /* xid=5 */ |
| master.000006 | 359 | Gtid | 20 | 432 | SET @@SESSION.GTID_NEXT= '043887ba-5ce8-11ea-8f3a-000c29d3fc7e:2' |
+---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
5 rows in set (0.00 sec)
mysql> slave1
1.修改Slave1的主配置文件
[root@yichen-slave1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=21
log_bin=/data/mysql/slave1
log_bin_index=/data/mysql/slave1/slave1.index
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
plugin_load_add='group_replication.so'
group_replication_group_name="36da6754-5f66-11ea-ad1b-000c29ac9351"
group_replication_start_on_boot=off
group_replication_local_address= "192.168.150.21:33061"
group_replication_group_seeds= "192.168.150.20:33061,192.168.150.21:33061,192.168.150.22:33061"
group_replication_bootstrap_group=off #不随系统自启而启动
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON2.创建用于分布式恢复的复制用户
[root@yichen-slave1 ~]# mysql -uroot -pCom.wang123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
mysql> create user mgr_user@'%' identified with mysql_native_password by 'Com.123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant replication slave on *.* to 'mgr_user'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> grant backup_admin on *.* to 'mgr_user'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to master_user='mgr_user', master_password='Com.123456' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.11 sec)
set sql_log_bin=0;
create user mgr_user@'%' identified with mysql_native_password by 'Com.123456';
grant replication slave on *.* to 'mgr_user'@'%';
grant backup_admin on *.* to 'mgr_user'@'%';
flush privileges;
set sql_log_bin=1;
change master to master_user='mgr_user', master_password='Com.123456' for channel 'group_replication_recovery';3.3.启动组复制
# 启动组复制,将slave01加入组
mysql> start group_replication;
Query OK, 0 rows affected (4.43 sec)
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 043887ba-5ce8-11ea-8f3a-000c29d3fc7e | yichen-master | 3306 | ONLINE | PRIMARY | 8.0.19 |
| group_replication_applier | 96a3aeca-5f5e-11ea-9547-000c29035817 | yichen-slave1 | 3306 | ONLINE | SECONDARY | 8.0.19 |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
2 rows in set (0.01 sec)
# 主库上创建
mysql> mysql> create database test1;
Query OK, 1 row affected (0.00 sec)
# 从库查看
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| employees |
| information_schema |
| mysql |
| performance_schema |
| sys |
| t |
| test1 |
| www |
+--------------------+
8 rows in set (0.00 sec)salve2
1.修改Slave2的主配置文件
[root@yichen-slave2 ~]# cd /data/mysql/
[root@yichen-slave2 mysql]# mkdir slave2
[root@yichen-slave2 mysql]# chown mysql:mysql slave2
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=22
log_bin=/data/mysql/slave2
log_bin_index=/data/mysql/slave2/slave2.index
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
plugin_load_add='group_replication.so'
group_replication_group_name="043887ba-5ce8-11ea-8f3a-000c29d3fc7e" #这里的是你的master设备的UUID
group_replication_start_on_boot=off
group_replication_local_address= "192.168.150.22:33061" ## 这里是你自己主机的IP地址
group_replication_group_seeds= "192.168.150.20:33061,192.168.150.21:33061,192.168.150.22:33061"
group_replication_bootstrap_group=off #不随系统自启而启动
[root@yichen-slave2 mysql]# systemctl restart mysqld2.创建用于分布式恢复的复制用户
[root@yichen-slave2 mysql]# mysql -uroot -pCom.wang123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
mysql> create user mgr_user@'%' identified with mysql_native_password by 'Com.123456';
ter_user='mgr_user', master_password='Com.123456' for channel 'group_replication_recovery';Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to 'mgr_user'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> grant backup_admin on *.* to 'mgr_user'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to master_user='mgr_user', master_password='Com.123456' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)3.启动组复制
mysql> change master to master_user='mgr_user',
-> master_password='Com.123456' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> reset master;
Query OK, 0 rows affected (0.10 sec)
mysql> start group_replication;
Query OK, 0 rows affected (3.78 sec)
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 043887ba-5ce8-11ea-8f3a-000c29d3fc7e | yichen-master | 3306 | ONLINE | PRIMARY | 8.0.19 |
| group_replication_applier | 96a3aeca-5f5e-11ea-9547-000c29035817 | yichen-slave1 | 3306 | ONLINE | SECONDARY | 8.0.19 |
| group_replication_applier | c5b69329-5f5e-11ea-ad3f-000c292c5972 | yichen-slave2 | 3306 | ONLINE | SECONDARY | 8.0.19 |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)4.检查错误
[root@yichen-master ~]# systemctl stop mysqld.service
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 96a3aeca-5f5e-11ea-9547-000c29035817 | yichen-slave1 | 3306 | ONLINE | PRIMARY | 8.0.19 |
| group_replication_applier | c5b69329-5f5e-11ea-ad3f-000c292c5972 | yichen-slave2 | 3306 | ONLINE | SECONDARY | 8.0.19 |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)
mysql> 五、MGR多主模式
- 按照以上实验环境,配置MGR多主模式
- group_replication_recovery: 此通道用于与分布式恢复阶段相关的复制更改
- group_replication_applier :此通道用于来自组的传入更改。这是用于应用直接来自组的事务的通道
1.修改所有服务器的配置文件
[root@yichen-master ~]# vim /etc/my.cnf
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
[root@yichen-master ~]# systemctl restart mysqld.service
[root@yichen-slave1 ~]# vim /etc/my.cnf
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
[root@yichen-slave1 ~]# systemctl restart mysqld
[root@yichen-slave2 ~]# vim /etc/my.cnf
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
[root@yichen-slave2 ~]# systemctl restart mysqld2.启动复制组
mysql> set global group_replication_bootstrap_group=on;
Query OK, 0 rows affected (0.00 sec)
mysql> start group_replication;
ERROR 3093 (HY000): The START GROUP_REPLICATION command failed since the group is already running.
mysql> stop group_replication;
Query OK, 0 rows affected (4.58 sec)
mysql> start group_replication;
Query OK, 0 rows affected (3.26 sec)
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 96a3aeca-5f5e-11ea-9547-000c29035817 | yichen-slave1 | 3306 | ONLINE | PRIMARY | 8.0.19 |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+-------------+----------------+
1 row in set (0.00 sec)3.其它节点加入复制组(分别在三个节点上启动组复制)
mysql> start group_replication; |
|