MGR全称MySQL Group Replication(Mysql组复制),是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高扩展、高可靠的MySQL集群服务。在MGR出现之前,用户常见的MySQL高可用方式,无论怎么变化架构,本质就是Master-Slave架构。MySQL 5.7版本开始支持无损半同步复制(lossless semi-sync replication),从而进一步提示数据复制的强一致性。

  MGR是MySQL数据库未来发展的一个重要方向。

  注意:根据本人测试group_replication.so插件是mysql-community-server安装包中携带,如果是rpm安装或yum安装存放地址为/usr/lib64/mysql/plugin/目录下,看下图。另外在安装5.7.16版本时是没有这个插件,而在安装5.7.20版本有这个插件,推测这是一个5.7.16到5.7.20之间新加的插件,个人建议安装5.7.20以上的版本。另外大家请在安装好mysql后查看一下是否存在这个插件。

  如果提示group_replication.so不存在,或提示有问题并且查看时发现group_replication.so不存在,请重点看一下mysql的版本。(我搜了一大圈,没有一个人说这个问题。表示怀疑自己,如果我错了,请留言。)

(1).MGR的特性

  高一致性。基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供一致数据安全保证;

  高容错性。只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;

  高扩展性。节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;

  高灵活性。有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。

(2).搭建MGR的基础结构要求和使用限制(重点)

  基础结构要求:1.引擎必须为innodb,因为需事务支持在commit时对各节点进行冲突检查;2.每个表必须有主键,在进行事务冲突检测时需要利用主键值对比;3.必须开启binlog且为row格式;4.开启GTID,且主从状态信息存于表中(--master-info-repository=TABLE 、--relay-log-info-repository=TABLE),--log-slave-updates打开;5.一致性检测设置--transaction-write-set-extraction=XXHASH64。

  使用限制:1.RP和普通复制binlog校验不能共存,需设置--binlog-checksum=none;2.不支持gap lock(间隙锁),隔离级别需设置为read_committed;3.不支持对表进行锁操作(lock /unlock table),不会发送到其他节点执行 ,影响需要对表进行加锁操作的情况,列入mysqldump全表备份恢复操作;4.不支持serializable(序列化)隔离级别;5.DDL语句不支持原子性,不能检测冲突,执行后需自行校验是否一;6.多主模式下不支持外键,单主模式下支持外键;最多9个节点,超过9台无法加入集群

(3).实验环境

youxi1  192.168.1.6  CentOS7.6  Mysql5.7.26  端口号3306  server-id=1

youxi2  192.168.1.7  CentOS7.6  Mysql5.7.26  端口号3306  server-id=2

youxi3  192.168.1.8  CentOS7.6  Mysql5.7.26  端口号3306  server-id=3

  另外,三台服务器上都进行IP的映射(如果此处不映射,请修改/etc/my.cnf配置文件中对应的域名为IP地址)

[root@youxi1 ~]# vim /etc/hosts
192.168.1.6 youxi1.cn youxi1  //长域名和短域名只要映射一个即可
192.168.1.7 youxi2.cn youxi2
192.168.1.8 youxi3.cn youxi3

(1).单主模式

  我是在空数据库下操作,如果主数据集已存在数据,需要将主数据库的数据导出再导入到从数据库。另外还需保证引擎为innodb,每个表必须存在主键。

1)以youxi1作为主服务器,对youxi1进行配置

  创建一个复制用的用户

mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '12345678';
Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

  修改配置文件,加入到[mysqld]模块下。然后重启mysqld

[root@youxi1 ~]# vim /etc/my.cnf
server-id=1  //Mysql服务ID
gtid-mode=on  //全局事务
enforce-gtid-consistency=on  //强制GTID的一致性
master-info-repository=TABLE  //将master.info元数据保存在系统表中
relay-log-info-repository=TABLE  //将relay.info元数据保存在系统表中
binlog-checksum=none  //禁用二进制日志事件校验
log-slave-updates=on  //级联复制
log-bin=binlog  //开启二进制日志记录
binlog-format=ROW  //以行的格式记录 transaction-write-set-extraction=XXHASH64  //使用哈希算法将其编码为散列
loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856'  //加入的组名,可以修改,只要格式对
loose-group_replication_start_on_boot=off  //不自动启用组复制集群
loose-group_replication_local_address='youxi1:33061'  //以本机端口33061接受来自组中成员的传入连接
loose-group_replication_group_seeds='youxi1:33061,youxi2:33062,youxi3:33063'  //组中成员访问表
loose-group_replication_bootstrap_group=off  //不启用引导组
[root@youxi1 ~]# systemctl restart mysqld

  注意:如果防火墙是打开的,记得添加mysql的端口号。

[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port={3306,33061}/tcp
success
[root@youxi1 ~]# firewall-cmd --reload
success
[root@youxi1 ~]# firewall-cmd --zone=public --list-ports
3306/tcp 33061/tcp

  修改master信息,构建组复制(group replication)集群信息

mysql> change master to master_user='repl',master_password='12345678' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.04 sec)

  安装组复制(group replication)插件,并查看组件信息

mysql> install PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.21 sec) mysql> show plugins;  //查看组件是否安装成功
+----------------------------+----------+--------------------+----------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+----------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_TEMP_TABLE_INFO | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_BEING_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_CONFIG | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_CACHE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_TABLE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_VIRTUAL | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ngram | ACTIVE | FTPARSER | NULL | GPL |
| validate_password | DISABLED | VALIDATE PASSWORD | validate_password.so | GPL |
| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
+----------------------------+----------+--------------------+----------------------+---------+
46 rows in set (0.00 sec)

  作为主服务器需要由这台服务器开启引导,开启组复制(group replication)集群

mysql> set global group_replication_bootstrap_group=on;  //开启组复制引导
Query OK, 0 rows affected (0.00 sec) mysql> start group_replication;  //开启组复制
Query OK, 0 rows affected (2.24 sec) mysql> set global group_replication_bootstrap_group=off;  //关闭组复制引导
Query OK, 0 rows affected (0.00 sec)

  查看到添加到组复制集群的服务器信息

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | c9e3662b-9020-11e9-94aa-000c29721e89 | youxi1 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
1 row in set (0.00 sec)

2)对youxi2进行配置

  创建一个复制用的用户

mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '12345678';
Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

  修改配置文件,加入到[mysqld]模块下。然后重启mysqld

[root@youxi2 ~]# vim /etc/my.cnf
server-id=2  //修改
gtid-mode=on
enforce-gtid-consistency=on
master-info-repository=TABLE
relay-log-info-repository=TABLE
binlog-checksum=none
log-slave-updates=on
log-bin=binlog
binlog-format=ROW transaction-write-set-extraction=XXHASH64
loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856'
loose-group_replication_start_on_boot=off
loose-group_replication_local_address='youxi2:33062'  //修改
loose-group_replication_group_seeds='youxi1:33061,youxi2:33062,youxi3:33063'
loose-group_replication_bootstrap_group=off
[root@youxi2 ~]# systemctl restart mysqld

  注意:如果防火墙是打开的,记得添加mysql的端口号。

[root@youxi2 ~]# firewall-cmd --permanent --zone=public --add-port={3306,33062}/tcp
success
[root@youxi2 ~]# firewall-cmd --reload
success
[root@youxi2 ~]# firewall-cmd --zone=public --list-ports
3306/tcp 33062/tcp

  修改master信息,构建组复制(group replication)集群信息

mysql> change master to master_user='repl',master_password='12345678' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.05 sec)

  安装组复制(group replication)插件

mysql> install PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.35 sec)

  把youxi2加到之前的组复制(group replication)

mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> start group_replication;
Query OK, 0 rows affected, 1 warning (5.92 sec)

  查看到添加到组复制集群的服务器信息

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 8fbf8b41-84fe-11e9-897e-000c29f27e52 | youxi2 | 3306 | ONLINE |
| group_replication_applier | c9e3662b-9020-11e9-94aa-000c29721e89 | youxi1 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)

3)youxi3的配置与youxi2的配置几乎一样,只需在/etc/my.cnf修改server-id和loose-group_replication_local_address即可。

  查看一下组复制集群信息

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 74df3399-91b8-11e9-be5f-000c299fdf40 | youxi3 | 3306 | ONLINE |
| group_replication_applier | 8fbf8b41-84fe-11e9-897e-000c29f27e52 | youxi2 | 3306 | ONLINE |
| group_replication_applier | c9e3662b-9020-11e9-94aa-000c29721e89 | youxi1 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.01 sec)

  注意:如果防火墙是打开的,记得添加mysql的端口号。

[root@youxi3 ~]# firewall-cmd --permanent --zone=public --add-port=3306/tcp
success
[root@youxi3 ~]# firewall-cmd --permanent --zone=public --add-port=33063/tcp
success
[root@youxi3 ~]# firewall-cmd --reload
success
[root@youxi3 ~]# firewall-cmd --zone=public --list-ports
3306/tcp 33063/tcp

4)测试

  在youxi1上创建数据

mysql> create database test_db;
Query OK, 1 row affected (0.00 sec) mysql> use test_db;
Database changed
mysql> create table user_tb(id int key,name varchar(20));  //id是主键,引擎默认是innodb
Query OK, 0 rows affected (0.02 sec) mysql> insert into user_tb values(1,'zhangsan');
Query OK, 1 row affected (0.08 sec)

  在youxi2上查看

mysql> select * from test_db.user_tb;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
+----+----------+
1 row in set (0.00 sec)

  在youxi3上查看

mysql> select * from test_db.user_tb;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
+----+----------+
1 row in set (0.00 sec)

5)那么怎么区分主从服务器

  MGR区分主从服务器使用show variables like '%read_only%';查看read_only相关参数。如果是主服务器(youxi1),会显示如下:

mysql> show variables like '%read_only%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_read_only | OFF |
| read_only | OFF |
| super_read_only | OFF |
| transaction_read_only | OFF |
| tx_read_only | OFF |
+-----------------------+-------+
5 rows in set (0.00 sec)

  如果是从服务器(youxi2)会显示如下:

mysql> show variables like '%read_only%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_read_only | OFF |
| read_only | ON |
| super_read_only | ON |
| transaction_read_only | OFF |
| tx_read_only | OFF |
+-----------------------+-------+
5 rows in set (0.01 sec)

6)查看当前服务器的组复制集群参数设置列表

mysql> show variables like 'group_replication%';
+----------------------------------------------------+----------------------------------------+
| Variable_name | Value |
+----------------------------------------------------+----------------------------------------+
| group_replication_allow_local_disjoint_gtids_join | OFF |
| group_replication_allow_local_lower_version_join | OFF |
| group_replication_auto_increment_increment | 7 |
| group_replication_bootstrap_group | OFF |
| group_replication_components_stop_timeout | 31536000 |
| group_replication_compression_threshold | 1000000 |
| group_replication_enforce_update_everywhere_checks | OFF |
| group_replication_exit_state_action | READ_ONLY |
| group_replication_flow_control_applier_threshold | 25000 |
| group_replication_flow_control_certifier_threshold | 25000 |
| group_replication_flow_control_mode | QUOTA |
| group_replication_force_members | |
| group_replication_group_name | ce9be252-2b71-11e6-b8f4-00212844f856 |
| group_replication_group_seeds | youxi1:33061,youxi2:33062,youxi3:33063 |
| group_replication_gtid_assignment_block_size | 1000000 |
| group_replication_ip_whitelist | AUTOMATIC |
| group_replication_local_address | youxi1:33061 |
| group_replication_member_weight | 50 |
| group_replication_poll_spin_loops | 0 |
| group_replication_recovery_complete_at | TRANSACTIONS_APPLIED |
| group_replication_recovery_reconnect_interval | 60 |
| group_replication_recovery_retry_count | 10 |
| group_replication_recovery_ssl_ca | |
| group_replication_recovery_ssl_capath | |
| group_replication_recovery_ssl_cert | |
| group_replication_recovery_ssl_cipher | |
| group_replication_recovery_ssl_crl | |
| group_replication_recovery_ssl_crlpath | |
| group_replication_recovery_ssl_key | |
| group_replication_recovery_ssl_verify_server_cert | OFF |
| group_replication_recovery_use_ssl | OFF |
| group_replication_single_primary_mode | ON |
| group_replication_ssl_mode | DISABLED |
| group_replication_start_on_boot | OFF |
| group_replication_transaction_size_limit | 0 |
| group_replication_unreachable_majority_timeout | 0 |
+----------------------------------------------------+----------------------------------------+
36 rows in set (0.00 sec)

7)如果主服务器出问题,MGR会自动切换主服务器

  将youxi1的mysqld人为关闭

[root@youxi1 ~]# systemctl stop mysqld

  之后前往youxi2和youxi3查看谁是主服务器

mysql> show variables like '%read_only%';  //这是youxi2的
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_read_only | OFF |
| read_only | ON |
| super_read_only | ON |
| transaction_read_only | OFF |
| tx_read_only | OFF |
+-----------------------+-------+
5 rows in set (0.01 sec) mysql> show variables like '%read_only%';  //这是youxi3的
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_read_only | OFF |
| read_only | OFF |
| super_read_only | OFF |
| transaction_read_only | OFF |
| tx_read_only | OFF |
+-----------------------+-------+
5 rows in set (0.02 sec)

  可以看到youxi3变成了主服务器,那么尝试在youxi3中插入数据

mysql> insert into test_db.user_tb values(2,'lisi');
Query OK, 1 row affected (0.14 sec)

  再到youxi2中查看数据

mysql> select * from test_db.user_tb;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
+----+----------+
2 rows in set (0.00 sec)

(2).多主模式

1)在创建时就启用多主模式

  在创建时就启用多主模式只需在修改配置文件/etc/my.cnf时多加两行参数。其余保持不变

loose-group_replication_single_primary_mode=off  //关闭单master模式
loose-group_replication_enforce_update_everywhere_checks=ON  //多主一致性检查

2)由单主模式改为多主模式

  由单主改为多主时,一样需要所有服务器配置信息增加两行参数,为了下次开启就是多主模式

loose-group_replication_single_primary_mode=off  //关闭单master模式
loose-group_replication_enforce_update_everywhere_checks=ON  //开启多主一致性检查

  然后全部服务器停止组复制(GROUP_REPLICATION)集群,并设置参数

mysql> stop GROUP_REPLICATION;
Query OK, 0 rows affected (9.51 sec) mysql> set global group_replication_single_primary_mode=off;  //关闭单主模式
Query OK, 0 rows affected (0.00 sec) mysql> set global group_replication_enforce_update_everywhere_checks=ON;  //开启多主一致性检查
Query OK, 0 rows affected (0.00 sec)

  选择其中一台引导组复制(GROUP_REPLICATION)集群

mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec) mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.13 sec) mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.01 sec)

  剩下的开启组复制(GROUP_REPLICATION)即可

mysql> start group_replication;
Query OK, 0 rows affected, 1 warning (6.05 sec)

  最后查看非引导组复制的服务器

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 74df3399-91b8-11e9-be5f-000c299fdf40 | youxi3 | 3306 | ONLINE |
| group_replication_applier | 8fbf8b41-84fe-11e9-897e-000c29f27e52 | youxi2 | 3306 | ONLINE |
| group_replication_applier | c9e3662b-9020-11e9-94aa-000c29721e89 | youxi1 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec) mysql> show variables like '%read_only%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_read_only | OFF |
| read_only | OFF |
| super_read_only | OFF |
| transaction_read_only | OFF |
| tx_read_only | OFF |
+-----------------------+-------+
5 rows in set (0.01 sec)

(3).如果宕机了

  停掉youxi1的mysqld模拟宕机

[root@youxi1 ~]# systemctl stop mysqld

  这时候查看youxi2和youxi3谁是新的master

[root@youxi2 ~]# mysql -uroot -p123456
mysql> show variables like '%read_only%';  //这是youxi2的
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_read_only | OFF |
| read_only | ON |
| super_read_only | ON |
| transaction_read_only | OFF |
| tx_read_only | OFF |
+-----------------------+-------+
5 rows in set (0.00 sec) [root@youxi3 ~]# mysql -uroot -p123456
mysql> show variables like '%read_only%';  //这是youxi3的,可以看出youxi3成为了新的master
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_read_only | OFF |
| read_only | OFF |
| super_read_only | OFF |
| transaction_read_only | OFF |
| tx_read_only | OFF |
+-----------------------+-------+
5 rows in set (0.00 sec)

  在youxi3上写入数据,这是因为生产环境数据库是一直在使用的状态,不可能等你修复后再用

[root@youxi3 ~]# mysql -uroot -p123456
mysql> insert into test_db.user_tb values(2,'lisi');
Query OK, 1 row affected (0.03 sec) mysql> select * from test_db.user_tb;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
+----+----------+
2 rows in set (0.00 sec)

  将修好的youxi1添加回复制组

[root@youxi1 ~]# systemctl start mysqld
[root@youxi1 ~]# mysql -uroot -p123456
mysql> select * from performance_schema.replication_group_members;
+---------------------------+-----------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+-----------+-------------+-------------+--------------+
| group_replication_applier | | | NULL | OFFLINE |
+---------------------------+-----------+-------------+-------------+--------------+
1 row in set (0.00 sec) mysql> change master to master_user='repl',master_password='12345678' for channel 'group_replication_recovery';  //这一步是为了以防万一,
Query OK, 0 rows affected, 2 warnings (0.01 sec) mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;  //将这台服务器重新添加进复制组
Query OK, 0 rows affected (0.00 sec) mysql> start group_replication;
Query OK, 0 rows affected (3.36 sec) mysql> select * from performance_schema.replication_group_members;  //查看是否加入复制组
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 07c6f159-964f-11e9-b2c7-000c2934a723 | youxi3 | 3306 | ONLINE |
| group_replication_applier | 8247f048-962f-11e9-a210-000c2975fa5d | youxi2 | 3306 | ONLINE |
| group_replication_applier | 8b703193-962a-11e9-b582-000c29e6d627 | youxi1 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec) mysql> select * from test_db.user_tb;  //查看是否同步数据,没有同步请耐心等待,时间可能会长点
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
+----+----------+
2 rows in set (0.00 sec)

  

MGR集群搭建的更多相关文章

  1. MySQL MGR集群搭建

    本文来自网易云社区,转载务必请注明出处. 本文将从零开始搭建一个MySQL Group Replication集群,包含3个节点.简单介绍如何查询MGR集群状态信息.并介绍如何进行MGR节点上下线操作 ...

  2. MySQL MGR集群单主模式的自动搭建和自动化故障修复

    随着MySQL MGR的版本的升级以及技术成熟,在把MHA拉下神坛之后, MGR越来越成为MySQL高可用的首选方案.MGR的搭建并不算很复杂,但是有一系列手工操作步骤,为了简便MGR的搭建和故障诊断 ...

  3. 4. 利用MySQL Shell安装部署MGR集群 | 深入浅出MGR

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 安装准备 2. 利用MySQL Shell构建MGR集群 3. MySQL Shell接管现存的MGR集群 4 ...

  4. 多云部署多主模式的MGR集群,每个云一个MGR 节点,满足业务单元化改造的需求

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...

  5. 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

    Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  6. 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)

    Oracle 11G RAC数据库安装(九) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  7. 【Data Cluster】真机环境下MySQL数据库集群搭建

    真机环境下MySQL-Cluster搭建文档  摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建.购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建.起初笔 ...

  8. (四)Spark集群搭建-Java&Python版Spark

    Spark集群搭建 视频教程 1.优酷 2.YouTube 安装scala环境 下载地址http://www.scala-lang.org/download/ 上传scala-2.10.5.tgz到m ...

  9. (三)Spark-Hadoop集群搭建-Java&Python版Spark

    Spark-Hadoop集群搭建 视频教程: 1.优酷 2.YouTube 配置java 启动ftp [root@master ~]# /etc/init.d/vsftpd restart 关闭 vs ...

随机推荐

  1. Android中sp和px之间关系探究

    记得当时在刚接触Android时都在说不要用px,要用sp,所以在实际工作当中当然就按照这个规则,所以都要将px换算成sp,而我在实际工作中的换算规则是dp=px * 1.5,而且用这种规则到现在基本 ...

  2. 使用python控制nginx禁封ip

    python控制nginx禁封ip nginx中的access.log最近有大量的用户访问,怎么样屏蔽掉在一定时间段内访问次数多的ip呢? 测试准备: 两个tomcat,一个nginx做均衡负载,服务 ...

  3. NOI2008 志愿者招募 (费用流)

    题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i 天至 ...

  4. Connecting Graph

    Given n nodes in a graph labeled from 1 to n. There is no edges in the graph at beginning. You need ...

  5. [Angular 8] Implement a Custom Preloading Strategy with Angular

    Preloading all modules is quite an extreme approach and might not always be desirable. For instance, ...

  6. sql server if exists和 if not exists 的关键字用法

    if exists和if not exists关键字用法   1.介绍  if not exists 即如果不存在,if exists 即如果存在 2.使用  a.判断数据库不存在时  if not ...

  7. 关于 js 函数参数的this

    先看一道面试题: var number = 10; function fn() { console.log(this.number); } var obj = { number: 2, show: f ...

  8. Hadoop YARN 调度器(scheduler) —— 资源调度策略

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/hadoop_yarn_resource_scheduler 搜了 ...

  9. codeforces396A

    sol:很显然就是找出所有质因数,然后分别塞进去就行了,怎么塞就是组合数.感觉就是道小学奥数题 #include <bits/stdc++.h> using namespace std; ...

  10. 使用dig进行DNS查询

    dig全称Domain Information Groper,是一个DNS域名信息查询的工具,可以使用来查看域名解析的过程. dig是linux下自带的工具,如果要在windows下使用需要自行下载和 ...