【MySQL Shell】8.3 InnoDB ClusterSet 的用户账户

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

8.3 InnoDB ClusterSet 的用户账户

集群中的成员服务器使用三种类型的用户帐户。一个 InnoDB Cluster 服务器配置帐户用于配置集群的服务器实例。可以创建一个或多个 InnoDB Cluster 管理员帐户以便管理员在集群设置后管理服务器实例。可以为 MySQL Router 实例创建一个或多个 MySQL Router 帐户以连接到集群。每个用户帐户必须存在于 InnoDB Cluster 中的所有成员服务器上具有相同的用户名和密码。

在 InnoDB ClusterSet 部署中每个成员服务器都是 InnoDB Cluster 的一部分因此它们需要相同类型的用户帐户。主集群中的用户帐户用于部署中的所有集群。每个用户帐户必须存在于部署中每个集群主集群和副本集群中的每个成员服务器上。

InnoDB Cluster 服务器配置账户

此帐户用于创建和配置 InnoDB Cluster 和 InnoDB ClusterSet 部署的成员服务器。每个成员服务器只有一个服务器配置帐户。 必须在集群中的每个成员服务器上使用相同的用户帐户名和密码。 为此可以使用服务器上的 root 帐户但如果这样做则集群中每个成员服务器上的 root 帐户必须具有相同的密码。出于安全原因不建议这样做。

首选方法是使用 dba.configureInstance() 命令和 clusterAdmin 选项创建 InnoDB Cluster 服务器配置帐户。为了获得更好的安全性请在交互提示下指定密码否则使用 clusterAdminPassword 选项指定密码。在将成为 InnoDB Cluster 一部分的每个服务器实例上以相同的方式使用相同的用户名和密码创建相同的帐户包括您连接到的创建集群的实例以及之后将加入集群的实例。

dba.configureInstance() 命令自动授予帐户所需的权限。如果愿意您可以手动设置帐户授予其 手动配置 InnoDB Cluster 管理员帐户 中列出的权限。除了完全的 MySQL 管理员权限外该帐户还需要对 InnoDB Cluster 元数据表具有完全的读写权限。

您使用 dba.configureInstance() 操作创建的 InnoDB Cluster 服务器配置帐户不会复制到 InnoDB Cluster 或 InnoDB ClusterSet 部署中的其他服务器。MySQL Shell 禁用 dba.configureInstance() 操作的二进制日志记录功能。这意味着您必须在每个服务器实例上单独创建帐户。

在 InnoDB ClusterSet 部署中部署中使用的每个服务器实例上必须存在相同的 InnoDB Cluster 服务器配置帐户。因此在设置副本集群时需要使用 clusterAdmin 选项执行 dba.configureInstance() 命令以在将成为副本集群一部分的每个服务器实例上创建帐户。该命令必须指定主集群中 InnoDB Cluster 服务器配置帐户并且必须为其指定相同的密码。在将实例加入副本集群之前需要执行此步骤因此该帐户可用于配置副本 InnoDB Cluster 和 InnoDB ClusterSet 部署元数据和复制。

InnoDB Cluster 管理员账户

完成配置过程后这些帐户可用于管理 InnoDB Cluster 和 InnoDB ClusterSet。 您可以设置多个。每个帐户必须以相同的用户名和密码存在于 InnoDB Cluster 中的每个成员服务器上以及 InnoDB ClusterSet 部署中每个集群的每一个成员服务器上。

要为 InnoDB ClusterSet 部署创建 InnoDB Cluster 管理员帐户在将所有实例添加到该集群后在主集群中的一个成员服务器上执行 cluster.setupAdminAccount() 命令。此命令使用您指定的用户名和密码创建一个具有所有所需权限的帐户。使用 cluster.setupAdminAccount() 创建帐户的事务被发送到集群中的所有其他服务器实例以在它们上创建帐户。

如果在您开始设置 InnoDB ClusterSet 部署时主 InnoDB Cluster 已经存在那么 InnoDB Cluster 管理员帐户可能已经存在。在这种情况下您不需要再次执行 cluster.setupAdminAccount() 除非您想创建更多的 InnoDB Cluster 管理员帐户。

InnoDB ClusterSet 部署中的副本集群必须具有与主集群相同的一组 InnoDB Cluster 管理员帐户。但是在创建副本集群时不要尝试自己设置 InnoDB Cluster 管理员帐户。使用 cluster.setupAdminAccount() 创建帐户的事务将写入主集群的二进制日志并在配置过程中自动从主集群复制到副本集群。当副本集群应用这些事务时它会在副本集群中的成员服务器上创建相同的帐户。如果副本集群中的服务器上已经存在帐户则会导致复制错误并且服务器无法加入群集。因此您需要等待它们被复制。

如果创建 InnoDB Cluster 管理员帐户的事务在主集群上发生了一段时间那么复制事务和帐户出现在副本集群上可能需要一些时间。选择克隆作为副本集群的资源调配方法可加快该过程。

注意
如果主 InnoDB Cluster 是在 MySQL Shell 8.0.20 之前的版本中设置的那么 cluster.setupAdminAccount() 命令可能与 update 选项一起使用以更新 InnoDB Cluster 服务器配置帐户的权限。这是该命令的一种特殊用法它不会写入二进制日志也不会复制到副本集群。

当 InnoDB ClusterSet 部署完成后您可以使用 cluster.setupAdminAccount() 为 ClusterSet 创建更多的 InnoDB Cluster 管理员帐户。您可以在连接到 InnoDB ClusterSet 部署中的任何成员服务器时执行此操作无论是在主集群还是在副本集群中。创建帐户的事务被路由到要执行的主集群然后复制到副本集群中的所有服务器在所有服务器上创建帐户。

MySQL Router 账户

MySQL Router 使用这些帐户连接到 InnoDB Cluster 和 InnoDB ClusterSet 部署中的服务器实例。您可以设置多个。每个帐户必须以相同的用户名和密码存在于 InnoDB Cluster 中的每个成员服务器上以及 InnoDB ClusterSet 部署中每个集群的每一个成员服务器上。

创建 MySQL Router 帐户的过程与 InnoDB Cluster 管理员帐户相同但使用 cluster.setupRouterAccount() 命令。您可以在主集群中的一个成员服务器上创建帐户或者使用已经存在的帐户如果在开始设置 InnoDB ClusterSet 部署时主 InnoDB Cluster 已经存在。然后让副本集群应用事务在其成员服务器上创建帐户。有关创建或升级 MySQL Router 帐户的说明请参阅 第 6.10.2 节 “配置 MySQL Router 用户”

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysqlshell