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入 ...
随机推荐
- SQL函数取汉字拼音首字母
)='') ) as begin ), ) , ,) if @chn > 'z' if( @chn < '八' ) set @c = 'A' else if ( @chn < '嚓' ...
- 牛客练习赛47 E DongDong数颜色 (树状数组维护区间元素种类数)
链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...
- ffmpeg函数03__av_seek_frame()
当需要把视频跳转到N秒的时候可以使用下面的方法:int64_t timestamp = N * AV_TIME_BASE; av_seek_frame(fmtctx, index_of_video, ...
- 文件操作相关函数(POSIX 标准 open,read,write,lseek,close)
POSIX标准 open函数属于Linux中系统IO,用于“打开”文件,代码打开一个文件意味着获得了这个文件的访问句柄. int fd = open(参数1,参数2,参数3): int fd = op ...
- MySQL更新字段来自另一个表的count()值
假设有文章post和评论comment两个表,文章表记录有评论的数量,但是这个值我们要一次更新. 如下,现在post表的comment_count都是0,我们的目标是:执行一个SQL语句,让其把统计c ...
- poj2987 Firing[最小割]
题目 求选最少点个数的最大权闭合子图.(板子题) 最小割入门题,什么都不想说,丢个别人题解地址就跑. 附加几点个人理解:与s相通的S点集是闭合子图,剩下的与t相通的T点集是其他的.任意一个割都保证了有 ...
- LINUX笔记之二常用命令(文件处理命令)
一.概述 1. “.”开头的文件是隐藏文件,大小写敏感是因为用C语言编写 2. DOS中 cd..可回到父目录 在LINUX中要用cd ..(用空格) 3. 4.LINUX命令有两种:仅root可执行 ...
- 排序(sort)
1.定义 排序 所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来.其确切定义如下: 输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn. 输出:Ril ...
- TTTTTTTTTTTTTTTTT POJ 2226 草地覆木板 二分匹配 建图
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9754 Accepted: 3618 Desc ...
- CentOS查看和修改PATH环境变量的方法
查看PATH:echo $PATH以添加mongodb server为列修改方法一:export PATH=/usr/local/mongodb/bin:$PATH//配置完后可以通过echo $PA ...