MySQL Group Replication [Single-Primary Mode] 详细搭建部署过程

1,关于MySQL Group Replication

基于组的复制(Group-basedReplication)是一种被使用在容错系统中的技术。Replication-group(复制组)是由能够相互通信的多个服务器(节点)组成的。

在通信层,Groupreplication实现了一系列的机制:比如原子消息(atomicmessage delivery)和全序化消息(totalorderingof messages)。

这些原子化,抽象化的机制,为实现更先进的数据库复制方案提供了强有力的支持。

 

MySQL Group Replication正是基于这些技术和概念,实现了一种多主全更新的复制协议。

简而言之,一个Replication-group就是一组节点,每个节点都可以独立执行事务,而读写事务则会在于group内的其他节点进行协调之后再commit。

因此,当一个事务准备提交时,会自动在group内进行原子性的广播,告知其他节点变更了什么内容/执行了什么事务。

这种原子广播的方式,使得这个事务在每一个节点上都保持着同样顺序。

这意味着每一个节点都以同样的顺序,接收到了同样的事务日志,所以每一个节点以同样的顺序重演了这些事务日志,最终整个group保持了完全一致的状态。

 

然而,不同的节点上执行的事务之间有可能存在资源争用。这种现象容易出现在两个不同的并发事务上。

假设在不同的节点上有两个并发事务,更新了同一行数据,那么就会发生资源争用。

面对这种情况,GroupReplication判定先提交的事务为有效事务,会在整个group里面重演,后提交的事务会直接中断,或者回滚,最后丢弃掉。

 

因此,这也是一个无共享的复制方案,每一个节点都保存了完整的数据副本。看如下图片01.png,描述了具体的工作流程,能够简洁的和其他方案进行对比。这个复制方案,在某种程度上,和数据库状态机(DBSM)的Replication方法比较类似。

 

 

 

2,安装mysql5.7.17

官方下载地址:http://dev.mysql.com/downloads/mysql/,不过官方只保留最新的version,5.7.17这个url地址不一定长期有效,所以,需要的不一定有,我这里在百度云盘保留了下来,版本是5.7.17,可以随时去下载使用,分享地址:链接:http://pan.baidu.com/s/1jIhqSXw密码:ifx5

 

安装过程参考我的blog地址:http://blog.csdn.net/mchdba/article/details/53889781,大概变化的地方就是my.cnf里面的server-id需要修改。

 

在三台db服务器上面设置/etc/hosts映射,如下:

192.168.121.71    db1                                                                                                                                                                                                               

192.168.121.111    db2                       

192.168.121.24    db3

 

 

安装的数据库服务器:

数据库服务器地址                                                 

端口                                                

数据目录                                      

Server-id                                      

192.168.121.71(db1)

3317

/data/mysql/data

12001        

192.168.121.111(db2)

3317

/data/mysql/data

12002

192.168.121.24(db3)

3317

/data/mysql/data

12003

 

 blog源地址为:http://blog.csdn.net/mchdba/article/details/54318316,作者mchdba(黄杉),谢绝转载

 

3,创建复制环境

设置hostname和ip映射

在db1、db2、db3上都设置

 

vim /etc/hosts
192.168.121.71 db1 hch_test_dbm2_121_71                                                                                              
192.168.121.111 db2 bpe_service
192.168.121.24 db3 hch_test_web_1_24

 

 

在db1/db2/db3上建立复制账号:

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%' IDENTIFIED BY 'rlpbright_1927@ys';   

 

 

4,安装group replication插件

在db1、db2、db3上依次安装group replication插件

 

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

 

 

 

plugin-load=group_replication或者直接在配置文件my.cnf中配置:

 

查看group replication组件

 

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     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| PERFORMANCE_SCHEMA         | 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     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL                 | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| ngram                      | ACTIVE   | FTPARSER           | NULL                 | GPL     |
| group_replication          | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL     |
+----------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)
 
mysql>


 

 

 

5,配置group replication参数

确保binlog_format是row格式。

mysql> show variables like 'binlog_format';                                            
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)
 
mysql>

 

 

两种配置方式,在线添加 OR 配置文件

5.1在线添加

配置:

(1)     配置命令如下,具体到某一个db节点会有所调整,大部分参数是一致的:

set @@global.transaction_write_set_extraction = XXHASH64                                 ;

 set @@global.group_replication_start_on_boot = OFF                                       ;

 set @@global.group_replication_bootstrap_group = OFF                                     ;

 set @@global.group_replication_group_name = "0c6d3e5f-90e2-11e6-802e-842b2b5909d6"       ;                                                                                                                          

 set @@global.group_replication_local_address = 'db1:6606'                                ;

 set @@global.group_replication_group_seeds = 'db2:6607,db3:6608'                         ;

 

(2)     在db1执行过程如下:

mysql> set @@global.transaction_write_set_extraction = XXHASH64;

Query OK, 0 rows affected (0.00 sec)

 

mysql> set @@global.group_replication_start_on_boot = OFF;

Query OK, 0 rows affected (0.00 sec)

 

mysql> set @@global.group_replication_bootstrap_group = OFF;

Query OK, 0 rows affected (0.00 sec)

 

mysql>

mysql>set @@global.group_replication_group_name = "0c6d3e5f-90e2-11e6-802e-842b2b5909d7";                             

Query OK, 0 rows affected (0.00 sec)

 

mysql> set @@global.group_replication_local_address = 'db1:6606';

Query OK, 0 rows affected (0.00 sec)

 

mysql> set @@global.group_replication_group_seeds = 'db2:6607,db3:6608';

Query OK, 0 rows affected (0.00 sec)

 

mysql>

 

 

(3)     在db2执行过程如下:

mysql>  set @@global.transaction_write_set_extraction = XXHASH64                                 ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  set @@global.group_replication_start_on_boot = OFF                                       ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  set @@global.group_replication_bootstrap_group = OFF                                     ;

Query OK, 0 rows affected (0.01 sec)

 

mysql>  set @@global.group_replication_group_name = "0c6d3e5f-90e2-11e6-802e-842b2b5909d6"       ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  set @@global.group_replication_local_address = 'db2:6607'                                ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  set @@global.group_replication_group_seeds = 'db1:6606,db3:6608'                         ;

Query OK, 0 rows affected (0.01 sec)

 

mysql>

 

 

(4)     在db3执行过程如下:

 

mysql>  set @@global.transaction_write_set_extraction = XXHASH64                                 ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  set @@global.group_replication_start_on_boot = OFF                                       ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  set @@global.group_replication_bootstrap_group = OFF                                     ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  set @@global.group_replication_group_name = "0c6d3e5f-90e2-11e6-802e-842b2b5909d6"       ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  set @@global.group_replication_local_address = 'db3:6608'                                ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  set @@global.group_replication_group_seeds = 'db1:6606,db2:6607'                         ;

Query OK, 0 rows affected (0.00 sec)

 

mysql>

 

 

5.2配置文件配置

(1) db1上的my.cnf配置:

server-id=12001

transaction_write_set_extraction = XXHASH64

loose-group_replication_group_name = "5f847ff2-d701-11e6-819c-b8ca3af6e36c"                                                                                                                                                      

loose-group_replication_start_on_boot = off

loose-group_replication_local_address = "db1:23306"

loose-group_replication_group_seeds = "db1:23306,db2:23307,db3:23308"

loose-group_replication_bootstrap_group = off

loose-group_replication_single_primary_mode = true

loose-group_replication_enforce_update_everywhere_checks = false

 

(2)db2上的my.cnf配置:

server-id=12002

transaction_write_set_extraction = XXHASH64

loose-group_replication_group_name = "5f847ff2-d701-11e6-819c-b8ca3af6e36c"

loose-group_replication_start_on_boot = off

loose-group_replication_local_address = "db2:23307"

loose-group_replication_group_seeds = "db1:23306,db2:23307,db3:23308"

loose-group_replication_bootstrap_group = off

loose-group_replication_single_primary_mode = true

loose-group_replication_enforce_update_everywhere_checks = false

 

 

(3)db3上的my.cnf配置:

server-id=12003

transaction_write_set_extraction = XXHASH64

loose-group_replication_group_name = "5f847ff2-d701-11e6-819c-b8ca3af6e36c"

loose-group_replication_start_on_boot = off

loose-group_replication_local_address = "db3:23308"

loose-group_replication_group_seeds = "db1:23306,db2:23307,db3:23308"

loose-group_replication_bootstrap_group = off

loose-group_replication_single_primary_mode = true

loose-group_replication_enforce_update_everywhere_checks = false

 

配置完后,重启3个db上的mysql服务,本次案例,我们选择5.2 配置文件配置方式实现。

 

 

 

 

6,启动mgr集群

开始构建group replication集群,通常操作命令

 

mysql>  CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='rlpbright_1927@ys' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec)
 
mysql>

 

 

 

 

Db1上建立基本主库master库:

 

# 设置group_replication_bootstrap_group为ON是为了标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置。
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 (1.03 sec)
 
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST          | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| group_replication_applier | 3d872c2e-d670-11e6-ac1f-b8ca3af6e36c | hch_test_dbm2_121_71 |        3317 | ONLINE       |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
1 row in set (0.00 sec)
 
mysql>

 

 

 

 

 

 

Db2上启动group_replication: 

 

Db2上mysql命令行上执行启动:
mysql>  START GROUP_REPLICATION;
Query OK, 0 rows affected (1.02 sec)
 
mysql>
 
db1上后台error log显示:
2017-01-10T07:37:39.946919Z 0 [Note] Plugin group_replication reported: 'getstart group_id 41e28b21'
2017-01-10T07:58:47.624090Z 0 [Note] Plugin group_replication reported: 'getstart group_id 41e28b21'
2017-01-10T07:58:53.116957Z 0 [Note] Plugin group_replication reported: 'Marking group replication view change with view_id 14840330835325176:6'
 
再去master库db1上,查看group_replication成员,会有db2的显示
mysql>  SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST          | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| group_replication_applier | 3d872c2e-d670-11e6-ac1f-b8ca3af6e36c | hch_test_dbm2_121_71 |        3317 | ONLINE       |
| group_replication_applier | fdf2b02e-d66f-11e6-98a8-18a99b76310d | bpe_service          |        3317 | ONLINE       |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
2 rows in set (0.00 sec)
 
mysql>

 

 

 

 

Db3上启动group_replication:

 

-- Db3命令行上执行:
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 (1.99 sec)
 
mysql>
 
-- 再去master库db1上,查看group_replication成员,会有db3的显示,而且已经是ONLINE了
mysql>  SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST          | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| group_replication_applier | 3d872c2e-d670-11e6-ac1f-b8ca3af6e36c | hch_test_dbm2_121_71 |        3317 | ONLINE       |
| group_replication_applier | ef8ac2de-d671-11e6-9ba4-18a99b763071 | hch_test_web_1_24    |        3317 | ONLINE       |
| group_replication_applier | fdf2b02e-d66f-11e6-98a8-18a99b76310d | bpe_service          |        3317 | ONLINE       |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
3 rows in set (0.01 sec)
 
mysql>
 
-- db1上后台error log显示:
2017-01-10T08:00:28.866356Z 0 [Note] Plugin group_replication reported: 'getstart group_id 41e28b21'
2017-01-10T08:00:54.699130Z 0 [Note] Plugin group_replication reported: 'getstart group_id 41e28b21'
2017-01-10T08:00:56.567427Z 0 [Note] Plugin group_replication reported: 'Marking group replication view change with view_id 14840330835325176:9'

 

 

 

 

 

 

 

最后查看集群状态,都为ONLINE就表示OK:

 

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST          | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| group_replication_applier | 3d872c2e-d670-11e6-ac1f-b8ca3af6e36c | hch_test_dbm2_121_71 |        3317 | ONLINE       |
| group_replication_applier | ef8ac2de-d671-11e6-9ba4-18a99b763071 | hch_test_web_1_24    |        3317 | ONLINE       |
| group_replication_applier | fdf2b02e-d66f-11e6-98a8-18a99b76310d | bpe_service          |        3317 | ONLINE       |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
3 rows in set (0.00 sec)
 
mysql>

 

 

 

 

 

 

7,验证集群复制功能

 

测试,在master库db1上建立测试库db1,测试表t1,录入一条数据

 

mysql> create database db1;
Query OK, 1 row affected (0.00 sec)
 
mysql> create table db1.t1(id int,cnvarchar(32));
Query OK, 0 rows affected (0.02 sec)
 
mysql>
mysql> insert into t1 select 1,'a';
ERROR 3098 (HY000): The table does notcomply with the requirements by an external plugin.
mysql>
mysql> insert into t1(id,cn)values(1,'a');
ERROR 3098 (HY000): The table does notcomply with the requirements by an external plugin.
mysql>
mysql>
-- # 这里原因是group_replaction环境下面,表必须有主键不然不允许往里insert值。所以修改表t1,将id字段设置程主键即可。
mysql> alter table t1 modify id intprimary key;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0  Warnings: 0
 
mysql> insert into t1 select 1,'a';
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0  Warnings: 0
 
mysql>

 

 

 

 

 

 

 

去db2/db3上可以看到数据已经同步过去

 

mysql> select * from db1.t1;
+----+------+
| id | cn  |
+----+------+
|  1| a    |
+----+------+
1 row in set (0.00 sec)
 
mysql>

 

 

 

然后在db2/db3上执行inert操作,则拒绝,因为db2、db3为readonly

 

mysql> insert into t1 select 2,'b';
ERROR 1290 (HY000): The MySQL server isrunning with the --super-read-only option so it cannot execute this statement
mysql>

 

 

 

 

 

8,问题记录

8.1问题记录一

MySQL窗口报错:

ERROR 3092 (HY000): The server is notconfigured properly to be an active member of the group. Please see moredetails on error log.

后台ERROR LOG报错:

[ERROR] Plugin group_replication reported:'This member has more executed transactions than those present in the group.Local transactions: f16f7f74-c283-11e6-ae37-fa163ee40410:1 > Grouptransactions: 3c992270-c282-11e6-93bf-fa163ee40410:1,

 aaaaaa:1-5'

 [ERROR]Plugin group_replication reported: 'The member contains transactions notpresent in the group. The member will now exit the group.'

 [Note] Plugin group_replication reported: 'Toforce this member into the group you can use the group_replication_allow_local_disjoint_gtids_joinoption'

 

【解决办法】:

根据提示打开group_replication_allow_local_disjoint_gtids_join选项,mysql命令行执行:

mysql> set globalgroup_replication_allow_local_disjoint_gtids_join=ON;

 

再执行开启组复制:

mysql> start group_replication;

Query OK, 0 rows affected (7.89 sec)

 

mysql>

 

 

8.2 问题记录二RECOVERING  

在db1上查询集群组成员

 

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST          | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| group_replication_applier | 3d872c2e-d670-11e6-ac1f-b8ca3af6e36c | hch_test_dbm2_121_71 |        3317 | ONLINE       |
| group_replication_applier | ef8ac2de-d671-11e6-9ba4-18a99b763071 | hch_test_web_1_24    |        3317 | RECOVERING   |
| group_replication_applier | fdf2b02e-d66f-11e6-98a8-18a99b76310d | bpe_service          |        3317 | RECOVERING   |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
3 rows in set (0.00 sec)
 
mysql>

 

 

 

 

再查看后台error日志,

 

2017-01-10T09:17:39.449488Z 146 [ERROR] Slave I/O for channel 'group_replication_recovery': error connecting to master 'repl@hch_test_dbm2_121_71:3317' - retry-time: 60  retries: 1, Error_code: 2003
2017-01-10T09:17:39.450289Z 146 [Note] Slave I/O thread for channel 'group_replication_recovery' killed while connecting to master
2017-01-10T09:17:39.450449Z 146 [Note] Slave I/O thread exiting for channel 'group_replication_recovery', read up to log 'FIRST', position 4
2017-01-10T09:17:39.451579Z 144 [ERROR] Plugin group_replication reported: 'There was an error when connecting to the donor server. Check group replication recovery's connection credentials.'
2017-01-10T09:17:39.452341Z 144 [Note] Plugin group_replication reported: 'Retrying group recovery connection with another donor. Attempt 2/10'
2017-01-10T09:17:39.457834Z 0 [Note] Plugin group_replication reported: 'Marking group replication view change with view_id 14840330835325176:25'
2017-01-10T09:18:39.456629Z 144 [Note] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_recovery' executed'. Previous state master_host='hch_test_dbm2_121_71', master_port= 3317, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='hch_test_dbm2_121_71', master_port= 3317, master_log_file='', master_log_pos= 4, master_bind=''.
2017-01-10T09:18:39.485250Z 144 [Note] Plugin group_replication reported: 'Establishing connection to a group replication recovery donor 3d872c2e-d670-11e6-ac1f-b8ca3af6e36c at hch_test_dbm2_121_71 port: 3317.'
2017-01-10T09:18:39.489356Z 150 [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.
2017-01-10T09:18:39.493511Z 150 [ERROR] Slave I/O for channel 'group_replication_recovery': error connecting to master 'repl@hch_test_dbm2_121_71:3317' - retry-time: 60  retries: 1, Error_code: 2005
2017-01-10T09:18:39.493912Z 150 [Note] Slave I/O thread for channel 'group_replication_recovery' killed while connecting to master
2017-01-10T09:18:39.494069Z 150 [Note] Slave I/O thread exiting for channel 'group_replication_recovery', read up to log 'FIRST', position 4
2017-01-10T09:18:39.495155Z 144 [ERROR] Plugin group_replication reported: 'There was an error when connecting to the donor server. Check group replication recovery's connection credentials.'
2017-01-10T09:18:39.496838Z 144 [Note] Plugin group_replication reported: 'Retrying group recovery connection with another donor. Attempt 3/10'

 

 

 

 

 

 

【解决办法】:

看报错[ERROR] Slave I/O for channel'group_replication_recovery': error connecting to master 'repl@hch_test_dbm2_121_71:3317'- retry-time: 60  retries: 1, Error_code:2005,连接master库不上,所以问题在这里,我们赋予的复制账号是ip的repl@'192.168.%',所以还需要做一个hostname(hch_test_dbm2_121_71)和db1的ip地址192.168.121.71的映射关系。

 

建立hostname和ip映射

vim /etc/hosts
192.168.121.71 db1 hch_test_dbm2_121_71                                          
192.168.121.111 db2 bpe_service
192.168.121.24 db3 hch_test_web_1_24

 

 

然后在db2上执行如下命令后重新开启group_replication即可。

 

mysql> stop group_replication;
Query OK, 0 rows affected (0.02 sec)                                                 
 
mysql> start group_replication;
Query OK, 0 rows affected (5.68 sec)
 
mysql>

 

 

 

 

再去master库db1上,查看group_replication成员,会有db2的显示

 

mysql>  SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST          | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
| group_replication_applier | 3d872c2e-d670-11e6-ac1f-b8ca3af6e36c | hch_test_dbm2_121_71 |        3317 | ONLINE       |
| group_replication_applier | fdf2b02e-d66f-11e6-98a8-18a99b76310d | bpe_service          |        3317 | ONLINE       |
+---------------------------+--------------------------------------+----------------------+-------------+--------------+
2 rows in set (0.00 sec)
 
mysql>
 

 

 

 

8.3问题记录三

操作问题

mysql>

mysql> START GROUP_REPLICATION;

ERROR 3092 (HY000): The server is notconfigured properly to be an active member of the group. Please see moredetails on error log.

 

【解决办法】:

mysql> SET GLOBALgroup_replication_bootstrap_group = ON;

Query OK, 0 rows affected (0.00 sec)

 

mysql> START GROUP_REPLICATION;

Query OK, 0 rows affected (1.03 sec)

 

mysql>

<think>嗯,用户这次的问题聚焦在MySQL组复制的两个具体操作:SETGLOBALgroup_replication_bootstrap_group=ON的作用,以及如何正确停止组复制。结合历史对话,用户之前已经了解过组复制的基本停止流程,现在需要更深入的技术细节。注意到用户提供了详细的引用材料,其中引用[1][4][5]都指向组复制启动时常见的GTID不一致错误,这说明用户可能在搭建或维护集群时遇到了实际问题。尤其引用[1]提到的"治标不治本"解决方案,暗示用户需要更根本的解决方法。关于bootstrap参数,需要强调三点:这是集群初始化的一次性操作,必须由第一个节点执行,且使用后必须立即关闭。用户如果是在已有集群中误操作这个参数,会导致严重的脑裂风险——这正是引用[2]中权重参数相关的隐患。技术上可以用状态机解释:当bootstrap=ON时,节点会将自己提升为组复制初始种子节点,创建新的$group_replication_group_name$空间。对于停止操作,要特别注意用户引用[3]提到的组复制基于二进制日志的特性。这意味着单纯执行STOPGROUP_REPLICATION可能不够,需要补充说明如何避免引用[4][5]中的事务不一致错误——比如通过RESETMAITAL删除本机日志,或者采用引用[1]建议的搭建前重置方案。安全建议部分特别加入了防火墙策略,因为用户没提到但实际运维中常被忽视。在生成相关问题时,刻意引向GTID处理方案,因为从用户提供的错误消息看,这可能是ta真正遭遇的痛点。</think> ### `SET GLOBAL group_replication_bootstrap_group=ON` 的作用 **核心功能**:该命令用于初始化一个新的组复制集群(引导集群),**仅需在集群的第一个节点上执行一次**: ```sql SET GLOBAL group_replication_bootstrap_group=ON; -- 允许当前节点引导集群 START GROUP_REPLICATION; -- 启动组复制 SET GLOBAL group_replication_bootstrap_group=OFF;-- 执行后立即关闭引导模式 ``` #### 为什么必须关闭? - **安全风险**:若多个节点开启此模式,会导致脑裂(多个集群并行运行)[^2] - **数据一致性**:仅首次创建集群时需要,后续节点加入时需保持 `OFF` 状态 #### 典型场景 1. 首次部署组复制集群时在 **首个节点** 执行 2. 集群全部崩溃后需**重新引导**时在初始节点执行 --- ### 组复制停止方法(强化版) #### 1. **安全停止单节点** ```sql STOP GROUP_REPLICATION; -- 停止当前节点组复制 SELECT MEMBER_STATE -- 验证状态为OFFLINE FROM performance_schema.replication_group_members; ``` #### 2. **有序停止全集群**(避免数据冲突) | 步骤 | 操作节点 | 命令示例 | 关键检查点 | |------|----------|--------------------------|--------------------------| | 1 | 所有从节点 | `STOP GROUP_REPLICATION;`| `MEMBER_STATE = OFFLINE` | | 2 | 主节点 | `STOP GROUP_REPLICATION;`| `Empty set`(无成员) | ```sql -- 最终验证(所有节点执行) SELECT * FROM performance_schema.replication_group_members; -- 预期输出:No rows selected ``` #### 3. **禁止重启后自动加入**(关键配置) 修改配置文件: ```ini [mysqld] group_replication_start_on_boot = OFF # 禁止自动启动[^3] ``` **生效流程**: ```mermaid graph LR A[修改my.cnf] --> B[重启MySQL服务] B --> C[systemctl restart mysqld] C --> D[配置永久生效] ``` #### 4. **彻底卸载组复制**(可选) ```sql UNINSTALL PLUGIN group_replication; DROP FUNCTION group_replication_switch_to_single_primary_mode; -- 需重启MySQL生效[^3] ``` --- ### ⚠️ 高频问题解决方案(参考用户引用) 当出现GTID冲突时(如引用[1][4][5]): ```sql -- 临时解决方案(可能数据丢失) SET GLOBAL group_replication_allow_local_disjoint_gtids_join=ON; -- 根本解决方案(新集群初始化时) RESET MASTER; -- 清除所有binary log[^1] START GROUP_REPLICATION; ``` --- ### 📌 最佳实践建议 1. **引导模式三原则**: - 仅用于集群初始化 - 仅第一个节点使用 - 执行后**立即关闭** 2. **停止集群时**: - 从节点 → 主节点顺序停止 - 用防火墙阻断3306端口防意外访问 3. **GTID冲突预防**: ```mermaid graph TB A[新节点加入前] --> B[检查gtid_executed] B --> C{是否包含未提交事务?} C -->|是| D[RESET MASTER清除日志] C -->|否| E[正常START GROUP_REPLICATION] ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值