InnoDB Cluster 中的成员服务器使用三种类型的用户帐户。一个 InnoDB Cluster 服务器配置帐户用于为集群配置服务器实例。可以创建一个或多个 InnoDB Cluster 管理员帐户,供管理员在集群设置完成后管理服务器实例。可以创建一个或多个 MySQL Router 帐户,供 MySQL Router 实例连接到集群。每个用户帐户都必须存在于 InnoDB Cluster 中的所有成员服务器上,并且具有相同的用户名和密码。
在 InnoDB ClusterSet 部署中,每个成员服务器都是 InnoDB Cluster 的一部分,因此它们需要相同类型的用户帐户。主集群中的用户帐户用于部署中的所有集群。每个用户帐户都必须存在于部署中每个集群(主集群和副本集群)的每个成员服务器上。
- InnoDB Cluster 服务器配置帐户
-
此帐户用于创建和配置 InnoDB Cluster 和 InnoDB ClusterSet 部署的成员服务器。每个成员服务器只有一个服务器配置帐户。集群中的每个成员服务器上都必须使用相同的用户帐户名称和密码。您可以为此目的使用服务器上的
root帐户,但如果这样做,集群中每个成员服务器上的root帐户都必须具有相同的密码。出于安全原因,不建议这样做。首选方法是使用带有
clusterAdmin选项的dba.configureInstance()命令创建 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 管理员帐户。在这种情况下,您不需要再次发出
,除非您想创建更多 InnoDB Cluster 管理员帐户。cluster.setupAdminAccount()InnoDB ClusterSet 部署中的副本集群必须具有与主集群相同的 InnoDB Cluster 管理员帐户集。但是,在创建副本集群时,请不要尝试自己设置 InnoDB Cluster 管理员帐户。使用
创建帐户的事务将写入主集群的二进制日志中,并在配置过程中自动从主集群复制到副本集群。当副本集群应用这些事务时,它会在副本集群的成员服务器上创建相同的帐户。如果副本集群中的服务器上已经存在这些帐户,则会导致复制错误,并且服务器无法加入集群。因此,您需要等待它们被复制。cluster.setupAdminAccount()如果在主集群上创建 InnoDB Cluster 管理员帐户的事务发生在一段时间之前,则该事务可能需要一段时间才能复制,并且该帐户可能需要一段时间才能出现在副本集群上。选择克隆作为副本集群的配置方法可以加快此过程。
注意如果主 InnoDB Cluster 是在 MySQL Shell 8.0.20 之前的版本中设置的,则可能已将
命令与cluster.setupAdminAccount()update选项一起使用来更新 InnoDB Cluster 服务器配置帐户的权限。这是该命令的一种特殊用法,不会写入二进制日志,也不会复制到副本集群。InnoDB ClusterSet 部署完成后,您可以使用
为 ClusterSet 创建更多 InnoDB Cluster 管理员帐户。您可以在连接到 InnoDB ClusterSet 部署中的任何成员服务器时执行此操作,无论是在主集群中还是在副本集群中。将创建帐户的事务路由到主集群以执行,然后复制到副本集群中的所有服务器,并在所有服务器上创建该帐户。cluster.setupAdminAccount() - MySQL Router 帐户
-
这些帐户由 MySQL Router 用于连接到 InnoDB Cluster 和 InnoDB ClusterSet 部署中的服务器实例。您可以设置多个帐户。每个帐户都必须存在于 InnoDB Cluster 中的每个成员服务器上,并且具有相同的用户名和密码或 SSL 证书,并且存在于 InnoDB ClusterSet 部署中每个集群的每个成员服务器上。
创建 MySQL Router 帐户的过程与创建 InnoDB Cluster 管理员帐户的过程相同,但使用的是
命令。您可以在主集群中的一个成员服务器上创建帐户,如果主 InnoDB Cluster 在您开始设置 InnoDB ClusterSet 部署时已经存在,则可以使用现有帐户。然后,让副本集群应用这些事务,以在其成员服务器上创建帐户。有关创建或升级 MySQL Router 帐户的说明,请参见 第 6.10.2 节,“配置 MySQL Router 用户”。cluster.setupRouterAccount()