Documentation Home
MySQL 外壳 8.0  / 第 7 章 MySQL InnoDB 集群  / 7.4 部署生产 InnoDB 集群  /  7.4.2 为 InnoDB 集群使用配置生产实例

7.4.2 为 InnoDB 集群使用配置生产实例

AdminAPI 提供 dba.configureInstance()检查实例是否适合 InnoDB Cluster 使用的功能,如果发现任何与 InnoDB Cluster 不兼容的设置,则配置实例。您针对一个实例运行该 dba.configureInstance()命令,它会检查使该实例用于 InnoDB Cluster 使用所需的所有设置。如果实例不需要更改配置,则无需修改实例的配置, dba.configureInstance()命令输出确认实例已准备好供 InnoDB Cluster 使用。

如果需要进行任何更改以使实例与 InnoDB Cluster 兼容,则会显示不兼容设置的报告,您可以选择让命令对实例的选项文件进行更改。根据 MySQL Shell 连接到实例的方式,以及实例上运行的 MySQL 版本,您可以通过将它们持久保存到远程实例的选项文件来使这些更改永久化,请参阅第 6.2.4 节,“持久设置”

不支持持久配置更改的实例会自动要求您在本地配置实例,请参阅使用配置实例 dba.configureLocalInstance()。或者,您可以手动更改实例的选项文件,有关更多信息,请参阅使用选项文件。无论您以何种方式更改配置,您都可能需要重新启动 MySQL 以确保检测到配置更改。

命令的语法dba.configureInstance() 是:

dba.configureInstance([instance][, options])

其中instance是一个实例定义,options是一个带有附加选项的数据字典来配置操作。该操作返回有关结果的描述性文本消息。

instance定义是实例的连接数据 。例如:

dba.configureInstance('user@example:3306')

有关详细信息,请参阅 使用类似 URI 的字符串或键值对连接到服务器。如果目标实例已经属于 InnoDB Cluster,则会生成错误并且进程失败。

选项字典可以包含以下内容:

  • mycnfPath- 实例的 MySQL 选项文件的路径。注意,InnoDB Cluster 只支持服务器实例的单个选项文件,不支持使用 --defaults-extra-file选项指定额外的选项文件。对于使用实例选项文件的任何 AdminAPI 操作,必须指定主文件。

  • outputMycnfPath- 写入实例的 MySQL 选项文件的替代输出路径。

  • password- 连接使用的密码。

  • clusterAdmin- 要创建的 InnoDB Cluster 管理员用户的名称。支持的格式是标准的 MySQL 帐户名格式。支持用户名和主机名的标识符或字符串。默认情况下,如果不加引号,它假定输入是一个字符串。请参阅第 6.4 节,“为 AdminAPI 创建用户帐户”

  • clusterAdminPassword- 正在使用创建的 InnoDB Cluster 管理员帐户的密码clusterAdmin。虽然您可以指定使用此选项,但这是一个潜在的安全风险。如果您未指定此选项,但指定了此 clusterAdmin选项,则系统会在交互式提示中提示您输入密码。

  • clearReadOnly- 一个布尔值,用于确认 super_read_only 应该设置为关闭,参见 超级只读模式下的实例配置。此选项已弃用,并计划在未来版本中删除。

  • interactive- 一个布尔值,用于在命令执行中禁用交互式向导,这样就不会向用户提供提示,也不会显示确认提示。

  • restart- 一个布尔值,用于指示应该执行目标实例的远程重启以完成操作。

虽然连接密码可以包含在实例定义中,但这是不安全的,不推荐使用。使用 MySQL Shell 第 4.4 节“可插入密码存储”来安全地存储实例密码。

一旦dba.configureInstance()针对实例发出,该命令将检查实例的设置是否适合 InnoDB Cluster 使用。将显示一份报告,其中显示 InnoDB Cluster 所需的设置。如果实例不需要对其设置进行任何更改,您可以在 InnoDB Cluster 中使用它,并且可以继续 第 7.4.3 节,“创建 InnoDB Cluster”。如果实例的设置对于 InnoDB Cluster 使用无效,则该 dba.configureInstance()命令会显示需要修改的设置。在配置实例之前,系统会提示您确认表格中显示的更改以及以下信息:

  • Variable- 无效的配置变量。

  • Current Value- 无效配置变量的当前值。

  • Required Value- 配置变量的必需值。

如何继续取决于实例是否支持持久设置,请参阅 第 6.2.4 节,“持久设置”。当 dba.configureInstance()针对 MySQL Shell 当前运行的 MySQL 实例(即本地实例)发出时,它会尝试自动配置该实例。当 dba.configureInstance()针对远程实例发出时,如果该实例支持自动持久化配置更改,您可以选择执行此操作。如果远程实例不支持持久化更改以配置它以供 InnoDB Cluster 使用,则必须在本地配置实例。请参阅 使用配置实例 dba.configureLocalInstance()

通常,配置选项文件后不需要重启实例 dba.configureInstance(),但对于某些特定设置,可能需要重启。此信息显示在发布后生成的报告中dba.configureInstance()。如果实例支持该 RESTART语句,MySQL Shell 可以关闭然后启动实例。这确保对实例的选项文件所做的更改被 mysqld 检测到。有关详细信息,请参阅 RESTART

笔记

执行RESTART 语句后,与实例的当前连接丢失。如果启用了自动重新连接,则在服务器重新启动后重新建立连接。否则,必须手动重新建立连接。

dba.configureInstance()方法验证是否有合适的用户可用于集群使用,用于集群成员之间的连接,请参阅 第 6.4 节,“为 AdminAPI 创建用户帐户”

如果您未指定用户来管理集群,则在交互模式下,向导使您可以选择以下选项之一:

  • 为 root 用户启用远程连接,不建议在生产环境中使用

  • 创建一个新用户

  • 没有自动配置,在这种情况下您需要手动创建用户

小费

如果实例有, super_read_only=ON那么您可能需要确认 AdminAPI 可以设置 super_read_only=OFF。更多信息请参见 超级只读模式下的实例配置

配置实例 dba.configureLocalInstance()

不支持自动持久化配置更改的实例(请参阅 第 6.2.4 节,“持久化设置”)要求您连接到服务器,运行 MySQL Shell,在本地连接到实例并发出 dba.configureLocalInstance(). 这使 MySQL Shell 能够在对远程实例运行以下命令后修改实例的选项文件:

  • dba.configureInstance()

  • dba.createCluster()

  • Cluster.addInstance()

  • Cluster.removeInstance()

  • Cluster.rejoinInstance()

重要的

未能将配置更改持久保存到实例的选项文件可能会导致实例在下次重启后无法重新加入集群。

实例的相关配置选项,尤其是 Group Replication 配置选项,必须位于单个选项文件中。InnoDB Cluster 只支持服务器实例的单个选项文件,不支持使用 --defaults-extra-file选项指定额外的选项文件。对于使用实例选项文件的任何 AdminAPI 操作,必须指定主文件。

持久化配置更改的推荐方法是登录到远程机器,例如使用 SSH,以 root 用户身份运行 MySQL Shell,然后连接到本地 MySQL 服务器。例如,使用 --uri连接到本地的选项instance

$> sudo -i mysqlsh --uri=instance

或者使用\connect命令登录本地实例。然后发出 ,其中是本地实例的连接信息,以保留对本地实例的选项文件所做的任何更改。 dba.configureInstance(instance)instance

mysql-js> dba.configureLocalInstance('icadmin@ic-2:3306')

对集群中不支持自动持久化配置更改的每个实例重复此过程。例如,如果您向不支持自动持久化配置更改的集群添加 2 个实例,则必须连接到每个服务器并在实例重新启动之前保留 InnoDB Cluster 所需的配置更改。同样,如果您修改集群结构,例如更改实例数,则需要为每个服务器实例重复此过程,以相应地为集群中的每个实例更新 InnoDB Cluster 元数据。

超级只读模式下的实例配置

每当 Group Replication 停止时,该 super_read_only变量将设置为ON以确保不会对实例进行写入。当您尝试通过以下 AdminAPI 命令使用此类实例时,您可以选择 super_read_only=OFF在实例上进行设置:

  • dba.configureInstance()

  • dba.configureLocalInstance()

  • dba.dropMetadataSchema()

当 AdminAPI 遇到具有 的实例时 super_read_only=ON,在交互模式下您可以选择设置 super_read_only=OFF。例如:

mysql-js> var myCluster = dba.dropMetadataSchema()
Are you sure you want to remove the Metadata? [y/N]: y
The MySQL instance at 'localhost:3310' currently has the super_read_only system
variable set to protect it from inadvertent updates from applications. You must
first unset it to be able to perform any changes to this instance.
For more information see:
https://mysql.net.cn/doc/refman/en/server-system-variables.html#sysvar_super_read_only.

Do you want to disable super_read_only and continue? [y/N]: y

Metadata Schema successfully removed.

显示实例的当前活动会话数。您必须确保没有应用程序可以无意中写入实例。通过回答y您确认 AdminAPI 可以写入实例。如果列出的实例有多个打开的会话,请在允许 AdminAPI 设置 之前谨慎行事 super_read_only=OFF