MySQL MGR 5.7.22 on centos 6.3 单主/多主搭建测试

搭建Mysql Group Replication
本次搭建采用3个实例,三个服务器,同一个网段,MGR的参数配置在配置文件中添加。
注意通讯端口号的配置,它用于组成员之间的通讯使用
请确定当前MySQL版本为5.7.17或者之后版本
每个实例的serverid必须是唯一标识,建议使用ip末端+端口描述
基础信息如下:
oracle linux 6.3/vbox

实例名	A	B	C
IP	192.168.20.123	192.168.20.124	192.168.20.125
实例端口号	3306	3306	3306
Server-ID	2018080801	2018080802	2018080803
通讯端口号	33061	33061	33061
MySQL Versoin	5.7.22	5.7.22	5.7.22
MGR参数配置方式	修改配置文件	修改配置文件	修改配置文件

单主模式(group_replication_single_primary_mode =ON)

1 主机名修改
# hostname
#vim /etc/hosts 
2 设置环境变量
关于GTID及日志信息记录相关参数(这部分的参数设置含义可以查看 第二部分:配置要求与限制 )
gtid_mode=on
enforce-gtid-consistency=on
binlog_gtid_simple_recovery=1
log-slave-updates=1
binlog_checksum=NONE
master_info_repository=TABLE
relay_log_info_repository=TABLE
关于MGR相关参数说明
transaction_write_set_extraction #记录事务的算法
group_replication_start_on_boot #是否随服务器启动而自动启动组复制
group_replication_bootstrap_group #引导组成员的组,这个用于第一次搭建MGR跟重新搭建MGR的时候使用
group_replication_group_name  #此GROUP的名字,必须是一个有效的UUID,以此来区分整个内网里边的各个不的GROUP
group_replication_local_address #本地的IP地址字符串,host:port
group_replication_group_seeds  #需要接受本实例的信息服务器IP地址字符串
group_replication_single_primary_mode #是否启动单主模式,如果启动,则本实例是主库,提供读写,其他实例仅提供读
group_replication_enforce_update_everywhere_checks #多主模式下,强制检查每一个实例是否允许该操作
[root@mgr1 ~]# vim /etc/hosts
192.168.20.123 mgr1
192.168.20.124 mgr2
192.168.20.125 mgr3
[root@mgr1 ~]# vim /etc/security/limits.conf
mysql        soft nproc 65535
mysql         hard    nproc   65535
mysql              soft    nofile  65535
mysql              hard    nofile  65535
[root@mgr1 ~]# vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 114.114.114.114
[root@mgr1 ~]# vim /etc/selinux/config
SELINUX=disabled
[root@mgr1 ~]# vim /etc/sysctl.conf
vm.swappiness = 0
[root@mgr1 ~]# sysctl -p
[root@mgr1 ~]# cat /etc/sysctl.conf |grep vm.swappiness
vm.swappiness = 0
[root@mgr1 ~]# cat /sys/block/sda/queue/rotational
1
[root@mgr1 ~]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq 
[root@mgr1 ~]# vim /etc/profile
HISTTIMEFORMAT="%Y:%M:%D %H-%m-%s"
export=HISTTIMEFORMAT
[root@mgr1 ~]# vim /etc/sysconfig/clock
ZONE="Asia/Shanghai"
UTC=false
ARC=false
[root@mgr1 ~]# rm /etc/localtime
rm: remove regular file `/etc/localtime'? y
[root@mgr1 ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@mgr1 ~]# date
Wed Aug  8 14:45:54 CST 2018
[root@mgr1 ~]# ntpdate 182.92.12.11
 8 Aug 10:46:37 ntpdate[2220]: step time server 182.92.12.11 offset -14396.270148 sec
[root@mgr1 ~]# date
Wed Aug  8 10:46:39 CST 2018
[root@mgr1 ~]# service iptables stop
[root@mgr1 ~]# chkconfig iptables off
[root@mgr1 ~]# vim /boot/grub/grub.conf
numa=off
[root@mgr1 yum.repos.d]# yum -y install lrzsz
[root@mgr1 /]# mkdir -p /data/soft
[root@mgr1 soft]# ll
-rw-r--r--. 1 root root     74692 Aug 18  2017 libev-4.15-1.el6.rf.x86_64.rpm
-rw-r--r--. 1 root root 643790848 May 16 14:18 mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
-rw-r--r--. 1 root root   7495680 May 10 17:03 percona-toolkit-3.0.9-r063ccb3-el6-x86_64-bundle.tar
-rw-r--r--. 1 root root   8388644 Aug 18  2017 percona-xtrabackup-24-2.4.8-1.el6.x86_64.rpm
-rw-r--r--. 1 root root    379910 Aug 18  2017 sysbench-0.5.zip
-rw-r--r--. 1 root root    901542 Jun 28 15:15 trunk.zip
-rw-r--r--. 1 root root  15012768 Aug 25  2017 zabbix-2.4.7.tar.gz
[root@mgr1 ~]# reboot
[root@mgr1 ~]# getenforce
Disabled

拷贝到另外2台虚拟机,并进行相应的修改
vim /etc/hosts
vim /etc/udev/rules.d/70-persistent-net.rules
用eth1的mac地址分别替换eth0,并删除1
start_udev
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改HWADDR=下面的mac的eth0和uuid
nmcli con list
nmcli dev list
init 6

[root@mgr1 soft]# id mysql
groupadd mysql
useradd -g mysql mysql
passwd mysql
[root@mgr1 soft]# ulimit -n
1024
[root@mgr1 soft]# ulimit -n 65535
[root@mgr1 soft]# vim /home/mysql/.bash_profile
export LANG=en_US.UTF-8
export PATH=/usr/local/mysql/bin:$PATH
export MYSQL_PS1="(\u@\h:\p) [\d]> "
挂载本地镜像文件
[root@mgr1 dev]# ls -l /dev/cdrom |grep cdrom
lrwxrwxrwx. 1 root root 3 Jun 28 08:26 /dev/cdrom -> sr0
[root@mgr1 ~]# mkdir /media/cdrom
[root@mgr1 ~]# mount -t iso9660 /dev/cdrom /media/cdrom
[root@mgr1 ~]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@mgr1 yum.repos.d]# vim public-yum-ol6.repo
[root@mgr1 yum.repos.d]# yum clean all
[root@mgr1 yum.repos.d]# cat public-yum-ol6.repo
[ol6_latest]
name=Oracle Linux $releasever Latest ($basearch)
gpgkey=file:///mnt/RPM-GPG-KEY-oracle
baseurl=file:///mnt
gpgcheck=1
enabled=1
yum install -y gcc gcc-*  make cmake gcc-c++  libaio libaio-devel bison bison-devel autoconf automake zlib*  libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* 
yum install -y openssl openssl-devel ncurses ncurses-devel 
yum -y install numactl.x86_64
# mkdir -p /data/mysqldata/{3306/{data,tmp,binlog,slave,log/iblog},backup,scripts}
tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -s mysql-5.7.22-linux-glibc2.12-x86_64 mysql
chown -R mysql:mysql /usr/local/mysql/
chown -R mysql:mysql /data/mysqldata/
[mysql@mgr1 3306]$ vim my.cnf
[mysql@mgr1 3306]$ /usr/local/mysql/bin/mysqld --defaults-file=/data/mysqldata/3306/my.cnf --datadir=/data/mysqldata/3306/data --basedir=/usr/local/mysql --user=mysql --initialize
[mysql@mgr1 3306]$ cat /data/mysqldata/3306/log/mysql-error.log |grep "root@localhost"|awk -F " " '{print $11}'
Xh7wwNSQ6Q?q
[mysql@mgr1 3306]$ mkdir -p /data/mysqldata/loadfile
[mysql@mgr1 3306]$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf &
[mysql@mgr1 3306]$ /usr/local/mysql/bin/mysql -uroot -p'Xh7wwNSQ6Q?q' -S /data/mysqldata/3306/mysql.sock
[root@mgr2 ~]# tail -f -n 100 /data/mysqldata/3306/log/mysql-error.log

创建用户操作

ALTER USER 'root'@'localhost' IDENTIFIED BY '***';
flush privileges;
grant ALL PRIVILEGES ON *.* TO 'system'@'%' IDENTIFIED BY "***";
grant ALL PRIVILEGES ON *.* TO 'system'@'127.0.0.1' IDENTIFIED BY "***";
create user repl@'%' identified by '***';
grant replication slave on *.* to repl@'%';
flush privileges;
(root@localhost:mysql.sock) [(none)]> show global variables like '%gtid%';
+----------------------------------+------------------------------------------+
| Variable_name                    | Value                                    |
+----------------------------------+------------------------------------------+
| binlog_gtid_simple_recovery      | ON                                       |
| enforce_gtid_consistency         | ON                                       |
| gtid_executed                    | a1250ef2-9add-11e8-867a-080027b40be7:1-7 |
| gtid_executed_compression_period | 1000                                     |
| gtid_mode                        | ON                                       |
| gtid_owned                       |                                          |
| gtid_purged                      |                                          |
| session_track_gtids              | OFF                                      |
+----------------------------------+------------------------------------------+
(root@localhost:mysql.sock) [(none)]> reset master;

===1 单主模式
搭建第一个节点

(root@localhost:mysql.sock) [(none)]> install PLUGIN group_replication SONAME 'group_replication.so';
(root@localhost:mysql.sock) [(none)]> show global variables like 'group%';
(root@localhost:mysql.sock) [(none)]> show plugins;

配置Group
按照先把实例A加入Group中,由于是第一个加入Group中,需要启动group_replication_bootstrap_group,引导组,实例A加入成功后,陆续加入实例B及实例C。

(root@localhost:mysql.sock) [(none)]> set global group_replication_bootstrap_group=ON; #启动 group_replication_bootstrap_group
(root@localhost:mysql.sock) [(none)]> change master to master_user='repl',master_password='mysqlmgrrepl' for channel 'group_replication_recovery'; #配置MGR
(root@localhost:mysql.sock) [(none)]> start group_replication; #启动MGR
(root@localhost:mysql.sock) [(none)]> set global group_replication_bootstrap_group=OFF; 关闭 group_replication_bootstrap_group
(root@localhost:mysql.sock) [(none)]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | a1250ef2-9add-11e8-867a-080027b40be7 | mgr1        |        3306 | ONLINE       |

在文件路径/data/mysqldata/3306/slave下面查看

[root@mgr1 slave]# ll
total 20
-rw-r----- 1 mysql mysql 138 Aug  8 15:47 mysqld-relay-bin-group_replication_applier.index
-rw-r----- 1 mysql mysql  70 Aug  8 15:46 mysqld-relay-bin-group_replication_recovery.index
-rw-r----- 1 mysql mysql 218 Aug  8 15:47 relaylog-group_replication_applier.000001
-rw-r----- 1 mysql mysql 887 Aug  8 16:09 relaylog-group_replication_applier.000002
-rw-r----- 1 mysql mysql 150 Aug  8 15:46 relaylog-group_replication_recovery.000001
*_apaplier.*  系列文件 提供 SQL_Thread 使用,存储同个组内其他SERVER的binnary log,这个文件在第一个组成员加入组的时候,可以在Error Log看到其安装信息。
*_recovery.* 系列文件 是做什么使用的呢,在第一个成员启动MGR的时候,并没有看到其相关信息,稍后解疑

加入第二个节点
创建相关账号后,reset master,清空binlog

(root@localhost:mysql.sock) [(none)]> install PLUGIN group_replication SONAME 'group_replication.so';

A实例

[mysql@mgr1 3306]$ mysql -usystem -p -h127.0.0.1 -P3306
create database mgr;
use mgr
create table tb1(id int primary key auto_increment not null,name varchar(100));
insert into tb1(name) select @@server_id;
insert into tb1(name) select @@server_id;
insert into tb1(name) select @@server_id;
insert into tb1(name) select @@server_id;
insert into tb1(name) select @@server_id;
(system@127.0.0.1:3306) [mgr]> select *from tb1;
+----+------------+
| id | name       |
+----+------------+
|  7 | 2018080801 |
| 14 | 2018080801 |
| 21 | 2018080801 |
| 28 | 2018080801 |
| 35 | 2018080801 |
(system@127.0.0.1:3306) [mgr]> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |     2059 |              |                  | aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-8 |
+------------------+----------+--------------+------------------+------------------------------------------+

接着,对实例B 进行操作:

(root@localhost:mysql.sock) [(none)]> show global variables like 'group%';
(root@localhost:mysql.sock) [(none)]> change master to master_user='repl',master_password='***' for channel 'group_replication_recovery';
(root@localhost:mysql.sock) [(none)]> start group_replication;

查看error log

2018-08-08T16:09:14.464332+08:00 29 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
2018-08-08T16:09:14.518857+08:00 30 [Warning] Slave SQL for channel 'group_replication_recovery': Coordinator thread of multi-threaded slave is being stopped in the middle of assigning a group of events; deferring to exit until the group completion ... , Error_code: 0
(system@127.0.0.1:3306) [mgr]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 03a1f793-9ae1-11e8-8e85-080027212595 | mgr2        |        3306 | ONLINE       |
| group_replication_applier | a1250ef2-9add-11e8-867a-080027b40be7 | mgr1        |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
在B实例上查询刚A执行的sql,B已经同步到A
(root@localhost:mysql.sock) [mgr]> select *from tb1;
+----+------------+
| id | name       |
+----+------------+
|  7 | 2018080801 |
| 14 | 2018080801 |
| 21 | 2018080801 |
| 28 | 2018080801 |
| 35 | 2018080801 |
+----+------------+

通过errrlog,可以详细看到启动过程的所有步骤信息,由于新增数据,导致实例B需要使用到 group_replication_recovery
通道来恢复数据。但是是怎么一个恢复过程呢?查看 *_recovery.* 系列文件 都是只有文件头没有binlog内容的文件。

[root@mgr2 slave]# ll
total 24
-rw-r----- 1 mysql mysql 138 Aug  8 16:09 mysqld-relay-bin-group_replication_applier.index
-rw-r----- 1 mysql mysql 140 Aug  8 16:09 mysqld-relay-bin-group_replication_recovery.index
-rw-r----- 1 mysql mysql 218 Aug  8 16:09 relaylog-group_replication_applier.000001
-rw-r----- 1 mysql mysql 598 Aug  8 16:09 relaylog-group_replication_applier.000002
-rw-r----- 1 mysql mysql 219 Aug  8 16:09 relaylog-group_replication_recovery.000001
-rw-r----- 1 mysql mysql 269 Aug  8 16:09 relaylog-group_replication_recovery.000002

加入第3个节点C
共B节点开始一样,创建用户,然后reset master;

(root@localhost:mysql.sock) [(none)]> install PLUGIN group_replication SONAME 'group_replication.so';
(root@localhost:mysql.sock) [(none)]> show global variables like 'group%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| group_concat_max_len | 1024  |
(root@localhost:mysql.sock) [(none)]> change master to master_user='repl',master_password='***' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)
(root@localhost:mysql.sock) [(none)]> start group_replication;
Query OK, 0 rows affected (3.21 sec)
(root@localhost:mysql.sock) [(none)]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 03a1f793-9ae1-11e8-8e85-080027212595 | mgr2        |        3306 | ONLINE       |
| group_replication_applier | 69bee6f7-9a63-11e8-a1ad-0800279f43a9 | mgr3        |        3306 | ONLINE       |
| group_replication_applier | a1250ef2-9add-11e8-867a-080027b40be7 | mgr1        |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
(root@localhost:mysql.sock) [mgr]> select *from tb1;
+----+------------+
| id | name       |
+----+------------+
|  7 | 2018080801 |
| 14 | 2018080801 |
| 21 | 2018080801 |
| 28 | 2018080801 |
| 35 | 2018080801 |
+----+------------+
5 rows in set (0.00 sec)

通过error log大小的变化,是通过group_replication_recovery 通道来恢复数据,需要恢复的binary log是存放在*_recovery.* 系列文件 ,
通过本次recovery 文件查看,发现,在recovery过程中,通道内的IO_THREAD拉去日志存储在 *_recovery.* 系列文件 中,
当通道内的 SQL_Thread 完成日志应用后,则会删除掉 *_recovery.* 系列文件 文件,新建空文件,代表已经没有数据需要恢复。
至此,单主模式已搭建结束,实例A可提供读写,但是实例B跟实例C仅提供读服务。

group_replication_applier 通道 提供组内成员向 MASTER 实时同步binlog日志使用,这个通道内IO_thread拉取到的日志存放在 *_apaplier.* 系列文件中,
再通过SQL_Thread应用到组内的各个SERVER上。
group_replication_recovery 通道 提供 首次加入GROUP或者重新加入GROUP时恢复数据使用,这个通道内 IO_thread拉取到的日志存放在 *_recovery.* 系列文件中,
再通过SQL_Thread应用到组内的各个SERVER上,应用结束后,删除所有  *_recovery.* 系列文件 ,重新建立新的 *_recovery.* 系列文件。
可以通过P_S库中的表格查询使用情况:SELECT * FROM mysql.slave_relay_log_info
(system@127.0.0.1:3306) [mgr]> SELECT * FROM mysql.slave_relay_log_info;
+-----------------+-----------------------------------------------------------------------+---------------+-----------------+----------------+-----------+-------------------+----+----------------------------+
| Number_of_lines | Relay_log_name                                                        | Relay_log_pos | Master_log_name | Master_log_pos | Sql_delay | Number_of_workers | Id | Channel_name               |
+-----------------+-----------------------------------------------------------------------+---------------+-----------------+----------------+-----------+-------------------+----+----------------------------+
|               7 | /data/mysqldata/3306/slave/relaylog-group_replication_applier.000002  |          1216 |                 |             65 |         0 |                16 |  1 | group_replication_applier  |
|               7 | /data/mysqldata/3306/slave/relaylog-group_replication_recovery.000001 |             4 |                 |              0 |         0 |                 0 |  1 | group_replication_recovery |
+-----------------+-----------------------------------------------------------------------+---------------+-----------------+----------------+-----------+-------------------+----+----------------------------+
2 rows in set (0.00 sec)
(system@127.0.0.1:3306) [mgr]> show global variables like 'group_replication_single_primary_mode';
+---------------------------------------+-------+
| Variable_name                         | Value |
+---------------------------------------+-------+
| group_replication_single_primary_mode | ON    |
+---------------------------------------+-------+
单主模式下,对实例C进行插入测试
(system@127.0.0.1:3306) [mgr]> insert into tb1(name) select @@server_id;
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

2 单主切换为多主

多主模式(group_replication_single_primary_mode =OFF)

# 动态修复方式
set global group_replication_single_primary_mode=OFF;
# 配置文件修改方式
loose_group_replication_single_primary_mode = OFF

在 GROUP_REPLICATION 运行的过程中,是不能修改这个参数的

(system@127.0.0.1:3306) [mgr]> set global group_replication_single_primary_mode=OFF;
ERROR 3093 (HY000): Cannot change into or from single primary mode while Group Replication is running.

所以,需要新停掉GROUP_REPLICATION。
操作流程:业务端连接IP处理 -> GROUP内成员逐个依次主动退出GROUP -> 关闭 group_replication_single_primary_mode参数-> 逐个启动GROUP内的SERVER

GROUP内成员逐个依次主动退出GROUP
连接实例A
(system@127.0.0.1:3306) > stop group_replication;
检查实例B,C的error log,发现实例A主动退出,group成员删除实例A
B,C实例的error log
2018-08-09T15:42:44.254762+08:00 0 [Warning] Plugin group_replication reported: 'Members removed from the group: mgr1:3306'
2018-08-09T15:42:44.300082+08:00 0 [Warning] Plugin group_replication reported: 'Members removed from the group: mgr1:3306'
B,C实例组成一个group,查看B,super_read_only=off
(system@127.0.0.1:3306) [mgr]> show variables like '%super%read%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| super_read_only | OFF   |
+-----------------+-------+
而A实例的super_read_only=on
(system@127.0.0.1:3306) [mgr]> stop group_replication;
Query OK, 0 rows affected (9.23 sec)
(system@127.0.0.1:3306) [mgr]> show variables like '%super%read%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| super_read_only | ON    |
+-----------------+-------+
1 row in set (0.00 sec)
(system@127.0.0.1:3306) [mgr]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | a1250ef2-9add-11e8-867a-080027b40be7 | mgr1        |        3306 | OFFLINE      |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
连接实例B
insert into tb1(name) select @@server_id;
(system@127.0.0.1:3306) [mgr]> select *from tb1;
+----+------------+
| id | name       |
+----+------------+
|  7 | 2018080801 |
| 14 | 2018080801 |
| 21 | 2018080801 |
| 28 | 2018080801 |
| 35 | 2018080801 |
| 36 | 2018080802 |
| 43 | 2018080802 |
(system@127.0.0.1:3306) > stop group_replication;
2018-08-09T15:51:05.062173+08:00 0 [Warning] Plugin group_replication reported: 'Members removed from the group: mgr2:3306'
这个时候,A,B均可以读,但是不在GROUP中,C也可以读写,目前是主库
连接实例C
(system@127.0.0.1:3306) [mgr]> show variables like '%super%read%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| super_read_only | OFF   |
+-----------------+-------+
(system@127.0.0.1:3306) [mgr]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 69bee6f7-9a63-11e8-a1ad-0800279f43a9 | mgr3        |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
(system@127.0.0.1:3306) > stop group_replication;
这个时候,整个GROUP内的所有成员都依次自动退出了GROUP。

关闭 group_replication_single_primary_mode参数
需要修改2个地方,第一个是动态修改参数,第二个是到配置文件中修改参数(防止DB服务重启,参数失效)
A,B,C
set global group_replication_single_primary_mode =OFF;
vim my.cnf
loose_group_replication_single_primary_mode = OFF

#实例C
#需要启动 group_replication_bootstrap_group 引导组,启动后需要关闭,防止脑裂
set global group_replication_bootstrap_group=ON;
change master to master_user='repl',master_password='***' for channel 'group_replication_recovery';
start group_replication;
set global group_replication_bootstrap_group=OFF;
-ERROR Log
2018-08-09T15:57:37.201330+08:00 54 [Warning] Plugin group_replication reported: '[GCS] Automatically adding IPv4 localhost address to the whitelist. It is mandatory that it is added.
#实例A
change master to master_user='repl',master_password='***' for channel 'group_replication_recovery';
start group_replication;
(system@127.0.0.1:3306) [mgr]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 69bee6f7-9a63-11e8-a1ad-0800279f43a9 | mgr3        |        3306 | ONLINE       |
| group_replication_applier | a1250ef2-9add-11e8-867a-080027b40be7 | mgr1        |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
select *from tb1; 查看数据,已经同步了上面执行的sql

#实例B
change master to master_user='repl',master_password='***' for channel 'group_replication_recovery';
start group_replication;
(system@127.0.0.1:3306) [mgr]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 03a1f793-9ae1-11e8-8e85-080027212595 | mgr2        |        3306 | ONLINE       |
| group_replication_applier | 69bee6f7-9a63-11e8-a1ad-0800279f43a9 | mgr3        |        3306 | ONLINE       |
| group_replication_applier | a1250ef2-9add-11e8-867a-080027b40be7 | mgr1        |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
这里B实例的error有报错
2018-08-09T15:58:47.870967+08:00 88 [ERROR] Slave SQL for channel 'group_replication_recovery': ... The slave coordinator and worker threads are stopped,
 possibly leaving data in inconsistent state. A restart should restore consistency automatically, although using non-transactional storage for data or info tables 
 or DDL queries could lead to problems. In such cases you have to examine your data (see documentation for details). Error_code: 1756

检查现在GROUP情况
目前GROUP中的各个成员都关闭了super_read_only选项,提供了读写服务,由于三个都为主库,属于多主情况,所以 global_status中无法查看到主库是哪个,因为这个GROUP中,每个SERVER都是MASTER。
(system@127.0.0.1:3306) [mgr]> show variables like '%super%read%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| super_read_only | OFF   |
+-----------------+-------+

select * from performance_schema.replication_group_members;
select * from performance_schema.global_status where variable_name like '%group%';
show global variables like 'group_replication_single_primary_mode';
show global variables like 'super%';
(system@127.0.0.1:3306) [mgr]> show global variables like 'group_replication_single_primary_mode';
+---------------------------------------+-------+
| Variable_name                         | Value |
+---------------------------------------+-------+
| group_replication_single_primary_mode | OFF   |
+---------------------------------------+-------+
(system@127.0.0.1:3306) [mgr]> SELECT * FROM performance_schema.global_status where variable_name='group_replication_primary_member';
+----------------------------------+----------------+
| VARIABLE_NAME                    | VARIABLE_VALUE |
+----------------------------------+----------------+
| group_replication_primary_member |                | #多主模式下,这个值是空的
+----------------------------------+----------------+

A节点执行

use mgr;
insert into tb1(name) select @@server_id;
create table tb4 like tb1;
insert into tb4 select * from tb1;
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' 
which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
(system@127.0.0.1:3306) [mgr]> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
(system@127.0.0.1:3306) [mgr]> show variables like '%group%'

猜你喜欢

转载自www.cnblogs.com/yhq1314/p/11310309.html