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%'
MySQL MGR 5.7.22 on centos 6.3 单主/多主搭建测试的更多相关文章
- ProxySQL Cluster 高可用集群 + MySQL MGR环境部署 (多写模式) 部署记录
文章转载自:https://blog.51cto.com/u_6215974/4937192 ProxySQL 在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数 ...
- MySQL+MGR 单主模式和多主模式的集群环境 - 部署手册 (Centos7.5)
MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案.MGR是MySQL官方在5.7.17版本引进的一个数据库高可用与 ...
- 为MySQL MGR实现简单的负载均衡代理
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 原创:万里数据库,花家舍 导读 在多写(多节点写入)数据库(例如MySQL MGR的multi-primary mode) ...
- windows下的mysql客户端mysqlworkbench链接虚拟机上CentOS的mysql服务器
本人在虚拟机上CentOS的Linux环境下安装了mysql服务器,在本地Windows下安装了mysql的客户端mysqlworkbench ,所以就想让windows下的mysql客户端mysql ...
- mysql安装和配置(windowns||centos)
windows10版本安装 1.获取mysql压缩包 https://dev.mysql.com/downloads/mysql/ 2.解压并配置文件my.ini .解压的文件路径 D:\Progra ...
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数 ...
- [实战]MVC5+EF6+MySql企业网盘实战(22)——图片列表
写在前面 实现逻辑是:单击图片节点,加载所有的当前用户之前上传的图片,分页,按时间倒序加载. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MyS ...
- MySQL MGR集群单主模式的自动搭建和自动化故障修复
随着MySQL MGR的版本的升级以及技术成熟,在把MHA拉下神坛之后, MGR越来越成为MySQL高可用的首选方案.MGR的搭建并不算很复杂,但是有一系列手工操作步骤,为了简便MGR的搭建和故障诊断 ...
- MySQL双主(主主)架构方案
在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mysql入 ...
随机推荐
- 最长回文子串(动规,中心扩散法,Manacher算法)
题目 leetcode:5. Longest Palindromic Substring 解法 动态规划 时间复杂度\(O(n^2)\),空间复杂度\(O(n^2)\) 基本解法直接看代码 class ...
- H5实现手写功能
html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf- ...
- win7系统安装虚拟网卡进行与Linux虚拟机的通信
有网络情况下,安装Linux时选择网桥即可实现Window与Linux直接通信. 无网络情况下,最简单的方法是在window系统中安装虚拟网卡,以进行与Linux的通信,步骤如下: (1)右击“我的计 ...
- Python基础-day05
高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...
- META标签的设置
㈠定义及用法 ⑴<meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. ⑵<meta> 标签位于文档的头部,不 ...
- HDU 6191 Query on A Tree ( 2017广西邀请赛 && 可持久化Trie )
题目链接 题意 : 给你一棵树.树上的每个点都有点权.之后有若干次问询.每次问询给出一个节点编号以及一个整数 X .问你以给出节点为根的子树中哪个节点和 X 异或最大.输出这个值 分析 : 看到这种树 ...
- Thread的setDaemon(true)方法的作用
定义:守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开.优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务.设置:通过setDaemon(true)来设置线程为“守护线 ...
- Luogu P4707 重返现世 (拓展Min-Max容斥、DP)
题目链接 https://www.luogu.org/problem/P4707 题解 最近被神仙题八连爆了-- 首先Min-Max容斥肯定都能想到,问题是这题要用一个扩展版的--Kth Min-Ma ...
- python学习之路(13)
列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, ...
- java取小数点后两位
package com.yonyou.sud.algorithm; import java.math.BigDecimal;import java.text.DecimalFormat;/*** ja ...