当有成员加入复制组中时,使用分布式恢复同步到加入组的成员中。分布式恢复包含使用名称为group_replication_recovery的通道将事务从发起事务的MySQL传输到正在加入的成员。因此你必须设置正确的且有权限的用户使组内成员可以建立直接交流的通道。如果组成员已经设置好了以支持远程克隆操作作为分布式恢复的一部分(该功能从MySQL 8.0.17开始可用),那么这个复制用户也将在捐赠者(即提供数据的服务器)上用作克隆用户(复制用户),并且该用户也需要具备这个角色所需的正确权限。对于分布式恢复详细信息查看20.5.4节,分布式恢复。
组内所有成员必须使用相同的复制用户。创建复制用户的操作会写入到binlog中并应用于分布式恢复,所以你可以依赖分布式恢复将创建用户。或者你可以在创建复制用户之前禁用binlog,然后手动在每个节点上进行创建,比如你不想将更改传播(同步)到其他节点。如果仅用了binlog,记得在配置完成之后重新启用binlog。
以上两段主要说的是在配置组复制的时候需要在每个节点创建用户,赋予正确的权限,手动在每个节点创建用户时记得禁用binlog,然后在创建完成后启用binlog。
如果你的组的分布式恢复连接使用了SSL(安全套接字层),那么在加入成员连接到捐赠者之前,必须在每个服务器上创建复制用户。
默认情况下,MySQL 8 中创建的用户使用“8.4.1.2节中描述的 缓存 SHA-2 可插拔身份验证”。
如果用于分布式恢复的复制用户使用缓存 SHA-2 身份验证插件,并且你没有为分布式恢复连接使用 SSL,那么将使用 RSA 密钥对进行密码交换。
你可以将复制用户的公钥复制到加入的成员上,或者配置捐赠者(数据提供者,也就是源库)在需要时提供公钥。
为分布式恢复创建用户,按照如下步骤操作:
1.启动MySQL Server实例,然后使用客户端连接。
2.如果你想在每个实例上单独创建用户,按照如下SQL来禁用binlog
SET SQL_LOG_BIN=0;
3.创建用户并赋予如下权限 :
REPLICATION_SLAVE:这个权限允许连接到源库上检索数据然后做分布式恢复
CONNECTION_ADMIN:如果一个server被置为OFFLINE,这个参数也会确保组复制的连接不会中断。
BACKUP_ADMIN:如果复制中的server被设置为支持cloning。那么这个权限就可以确保可以从源库使用clon的方式进行分布式恢复。
GROUP_REPLICATION_STREM:当 MySQL 通信栈被用于复制组时(参见“20.6.1 通信栈用于连接安全管理”),这个权限是必需的。这个权限允许用户账户使用 MySQL 通信栈来建立和维持 Group Replication 的连接。
创建用户并赋权示例如下:
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%';
mysql> GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
mysql> GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
4.如果仅用了binlog,只要用户配置完成,就马上重新启用binlog
mysql> SET SQL_LOG_BIN=1;
5.在创建了复制用户之后,您需要将用户凭据提供给服务器,以便在分布式恢复中使用。您可以通过将用户凭据设置为group_replication_recovery
通道的凭据来实现这一点,具体可以使用CHANGE REPLICATION SOURCE TO
语句(从MySQL 8.0.23开始)或CHANGE MASTER TO
语句(在MySQL 8.0.23之前)。另外,从MySQL 8.0.21开始,您还可以在START GROUP_REPLICATION
语句中指定分布式恢复的用户凭据。
通过change replication source to或者change master to设置的用户凭证被存储在复制元数据仓库中(复制元数据仓库:MySQL 服务器内部用于存储复制相关信息的存储区域,这些信息包括复制的位置、偏移量、复制用户的凭据等),这些凭据会在启动组复制时被应用,包括如果 group_replication_start_on_boot
系统变量被设置为 ON
时的自动启动。
通过start group_replication指定的用户凭证只保存在内存中,通过stop group_replication或者服务shutdown后自动移出。你必须执行start group_replication重新提供凭证,所以启动组复制的时候会自动使用这些凭证。这种方法指定用户凭据有助于保护组复制服务器免受未经授权的访问。
关于提供用户凭据的每种方法的安全影响的更多信息,请参阅“第20.6.3.1.3节,安全地提供复制用户凭据”。如果您选择使用CHANGE REPLICATION SOURCE TO
或CHANGE MASTER TO
语句来提供用户凭据,请在服务器实例上执行以下语句,将rpl_user
和password
替换为创建用户时使用的值:
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' \\ FOR CHANNEL 'group_replication_recovery';
从MySQL 8.0.23以及更高版本:
mysql> CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='password' \\ FOR CHANNEL 'group_replication_recovery';