## 前期回顾

这期的专题我们来介绍MySQL组复制相关的内容

| 主机名 |业务IP|私有IP  |复制用户|角色
| --- | --- | --- |  --- | ---|
| rac1 | 11.12.14.29| 10.10.10.11 |rpl|主|
| rac2| 11.12.14.30| 10.10.10.12|rpl|从|
| rac3 | 11.12.14.39 | 10.10.10.13|rpl|从|


[image:717 size:orig]



上节我们说了MGR部署前的准备,这节内容为如何部署


## 1.rac1新建组复制用户

这里我们和前面说过的复制一样,也需要新建用户用于复制

我们这里使用SET SQL_LOG_BIN=0;让该命令不生成日志文件,这样就不会传到其他服务器上了,该变量为session级别

**rac1**

```
mysql>SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl@'%' IDENTIFIED BY 'rpl'; 
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl@'%'; 
mysql> FLUSH PRIVILEGES;
mysql>SET SQL_LOG_BIN=1;
```

## 2. 开启复制通道

**rac1**
```
mysql> CHANGE MASTER TO MASTER_USER='rpl',MASTER_PASSWORD='rpl'  FOR CHANNEL 'group_replication_recovery';
```

## 3. 引导组复制

第一次启动组复制的过程我们叫做引导(bootstrapping)

我们使用group_replication_bootstrap_group参数来引导以一个组,该参数在前面配置中是off状态

**rac1**

```
mysql> SET GLOBAL group_replication_bootstrap_group=ON; 
mysql> START GROUP_REPLICATION; 
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
```

[image:712 size:orig]


可以看到启动完成并且rac1为主成员

这时我们可以查询下面语句查看MGR信息

```

SELECT * FROM performance_schema.replication_group_members;
```
[image:713 size:orig]

从上图可以看到该组中有一成员,该成员的uuid为4e551942-aeb6-11e9-a5c8-0050568cef02,同时还包含了主机名和监听端口信息,状态为online


这时我们可以在rac1上新增一些表供后续测试使用

```
mysql>use test
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL); 
mysql> INSERT INTO t1 VALUES (1, 'Luis');
```

## 4. 加入第二个成员


这时我们的MGR已经引导完成,接下来我们将rac2加入到组中

一些配置信息我们在上节已经说到了,包括复制配置和组复制配置

### 4.1 新建用户

**rac2**

```
mysql>SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl@'%' IDENTIFIED BY 'rpl'; 
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl@'%'; 
mysql> FLUSH PRIVILEGES;
mysql>SET SQL_LOG_BIN=1;
```


### 4.2 开启复制通道

**rac2**
```
mysql> CHANGE MASTER TO MASTER_USER='rpl',MASTER_PASSWORD='rpl'  FOR CHANNEL 'group_replication_recovery';
```


### 4.3 开启组复制

**rac2**
```
START GROUP_REPLICATION; 
```

[image:714 size:orig]


这时查询test数据库中的表发现t1表已经同步过来了

## 5. 加入第三个成员


接下来我们将rac3加入到组中

一些配置信息我们在上节已经说到了,包括复制配置和组复制配置

### 5.1 新建用户

**rac3**

```
mysql>SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl@'%' IDENTIFIED BY 'rpl'; 
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl@'%'; 
mysql> FLUSH PRIVILEGES;
mysql>SET SQL_LOG_BIN=1;
```


### 5.2 开启复制通道

**rac3**
```
mysql> CHANGE MASTER TO MASTER_USER='rpl',MASTER_PASSWORD='rpl'  FOR CHANNEL 'group_replication_recovery';
```


### 5.3 开启组复制

**rac3**

```
START GROUP_REPLICATION; 
```

[image:715 size:orig]



这时查询test数据库中的表发现t1表也已经同步过来了

## 6. MGR自启动设置

在上节中由于我们MGR还没部署,将group_replication_start_on_boot设置为off,在完成搭建后我们将其设置为on

**三个服务器**
```
group_replication_start_on_boot=on
```

## 7.  注意事项

MGR单主模式下只有一个主成员负责读写,其他成员都是只读,主成员为第一个加入组的服务器,即rac1

其他成员在加入组中read_only和super_read_only参数会自动设置为ON

如果组内所有服务器都关闭了,需要重新引导组

[image:716 size:orig]


## 8. 参考资料

[https://dev.mysql.com/doc/refman/5.7/en/group-replication-getting-started.html](https://dev.mysql.com/doc/refman/5.7/en/group-replication-getting-started.html)