17.2.1.3 用户凭证

组复制使用异步复制协议来实现第 17.9.5 节“分布式恢复”,在将组成员加入组之前对其进行同步。分布式恢复过程依赖于名为group_replication_recovery的复制通道,该通道用于将事务从施主成员转移到加入该组的成员。因此,您需要设置具有正确权限的复制用户,以便组复制可以构建直接的成员到成员恢复复制通道。

启动 MySQL 服务器实例,然后将 Client 端连接到它。创建一个具有REPLICATION SLAVE特权的 MySQL 用户。可以在二进制日志中捕获此过程,然后可以依靠分布式恢复来复制用于创建用户的语句。或者,您可以使用SET SQL_LOG_BIN=0;禁用二进制日志记录,然后在每个成员上手动创建用户,例如,如果要避免将更改传播到其他服务器实例。如果您确实决定禁用二进制日志记录,请确保在配置用户后将其启用。

在以下示例中,显示了用户* rpl_user 和密码 password *。配置服务器时,请使用适当的用户名和密码。

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;

如果禁用了二进制日志记录,则使用SET SQL_LOG_BIN=1;创建用户后再次启用它。

一旦配置了用户,就可以使用更改为主语句将服务器配置为在下次需要从另一个成员恢复状态时使用group_replication_recovery复制通道的给定凭据。发出以下命令,将* rpl_user password *替换为创建用户时使用的值。

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' \\
		      FOR CHANNEL 'group_replication_recovery';

分布式恢复是加入组且与组成员没有相同事务集的服务器所采取的第一步。如果未正确为_复制通道和rpl_user设置这些凭据,则服务器将无法连接到施主成员并运行分布式恢复过程以与其他组成员保持同步,因此最终无法加入该组。参见第 17.9.5 节“分布式恢复”

同样,如果服务器无法通过服务器的hostname正确识别其他成员,则恢复过程可能会失败。建议运行 MySQL 的 os 使用 DNS 或本地设置具有正确配置的唯一hostname。可以在performance_schema.replication_group_memberstable 的Member_host列中验证此hostname。如果多个组成员将 os 设置的默认hostname外部化,则该成员可能无法解析为正确的成员地址,也无法加入该组。在这种情况下,请使用report_host配置要由每个服务器外部化的唯一hostname