下载本手册
PDF (US Ltr) - 2.2Mb
PDF (A4) - 2.3Mb


MySQL Shell 8.4  /  ...  /  为使用 InnoDB Cluster 配置生产实例

7.4.2 为使用 InnoDB Cluster 配置生产实例

AdminAPI 提供了 dba.configureInstance() 函数,该函数可检查实例是否已针对 InnoDB Cluster 使用进行适当配置,并在发现任何与 InnoDB Cluster 不兼容的设置时配置实例。您可以在实例上运行 dba.configureInstance() 命令,它会检查启用实例以用于 InnoDB Cluster 使用所需的所有设置。如果实例不需要配置更改,则无需修改实例的配置,并且 dba.configureInstance() 命令输出确认该实例已准备好用于 InnoDB Cluster 使用。

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

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 选项文件的备用输出路径。

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

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

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

尽管连接密码可以包含在实例定义中,但这并不安全,因此不建议这样做。请使用 MySQL Shell 第 4.4 节“可插拔密码存储” 来安全地存储实例密码。

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

  • 变量 - 无效的配置变量。

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

  • 所需值 - 配置变量的所需值。

您如何继续取决于实例是否支持持久化设置,请参阅 第 6.2.3 节“持久化设置”。当在 MySQL Shell 当前运行的 MySQL 实例(即本地实例)上发出 dba.configureInstance() 时,它会尝试自动配置实例。当针对远程实例发出 dba.configureInstance() 时,如果实例支持自动持久化配置更改,则可以选择这样做。

通常,在 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。有关更多信息,请参阅 超级只读模式下的实例配置

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

每当组复制停止时,super_read_only 变量都会设置为 ON 以确保不会对实例进行任何写入。当您尝试将以下 AdminAPI 命令与这样的实例一起使用时,您可以选择在实例上设置 super_read_only=OFF

  • dba.configureInstance()

  • 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://dev.mysqlserver.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 之前谨慎操作。