zoukankan      html  css  js  c++  java
  • 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%'
  • 相关阅读:
    Nginx核心配置-作为上传服务器配置
    Nginx核心配置-作为下载服务器配置
    Nginx核心配置-长连接配置
    Nginx核心配置-检测文件是否存在
    Nginx核心配置-自定义日志路径及清空日志注意事项
    Nginx核心配置-自定义错误页面
    Nginx核心配置-location的登录账户认证实战篇
    Nginx核心配置-location的匹配案例实战篇
    前后端分离-Restful最佳实践
    Django模板技术
  • 原文地址:https://www.cnblogs.com/yhq1314/p/11310309.html
Copyright © 2011-2022 走看看