AdminAPI 提供 dba.configureInstance()
函数,该函数检查实例是否适合 InnoDB 集群使用,并在发现任何与 InnoDB 集群不兼容的设置时配置实例。您可以对实例运行 dba.configureInstance()
命令,它将检查所有必要的设置以启用实例以供 InnoDB 集群使用。如果实例不需要进行配置更改,则无需修改实例的配置,并且 dba.configureInstance()
命令输出将确认该实例已准备好用于 InnoDB 集群使用。
如果需要进行任何更改以使实例与 InnoDB 集群兼容,则会显示不兼容设置的报告,您可以选择让命令对实例的选项文件进行更改。根据 MySQL Shell 连接到实例的方式以及实例上运行的 MySQL 版本,您可以通过将其持久保存到远程实例的选项文件来使这些更改永久生效,请参阅 第 6.2.3 节“持久保存设置”。
dba.configureInstance()
命令的语法为
dba.configureInstance([instance][, options])
其中 instance
是实例定义,而 options
是一个数据字典,其中包含用于配置操作的其他选项。该操作将返回有关结果的描述性文本消息。
instance
定义是实例的连接数据。例如
dba.configureInstance('user@example:3306')
有关更多信息,请参阅 使用类似 URI 的字符串或键值对连接到服务器。如果目标实例已属于 InnoDB 集群,则会生成错误,并且该过程将失败。
选项字典可以包含以下内容
mycnfPath
- 实例的 MySQL 选项文件路径。请注意,InnoDB 集群仅支持服务器实例的单个选项文件,并且不支持使用--defaults-extra-file
选项来指定其他选项文件。对于使用实例选项文件进行的任何 AdminAPI 操作,都必须指定主文件。outputMycnfPath
- 用于写入实例的 MySQL 选项文件的备用输出路径。clusterAdmin
- 要创建的 InnoDB 集群管理员用户的名称。支持的格式是标准的 MySQL 帐户名称格式。支持标识符或字符串作为用户名和主机名。默认情况下,如果未加引号,则假定输入是字符串。请参阅 第 6.4 节“创建 AdminAPI 的用户帐户”。clusterAdminPassword
- 使用clusterAdmin
创建的 InnoDB 集群管理员帐户的密码。虽然您可以使用此选项进行指定,但这存在潜在的安全风险。如果您未指定此选项,但指定了clusterAdmin
选项,则会在交互式提示符处提示您输入密码。restart
- 一个布尔值,用于指示是否应执行目标实例的远程重启以完成操作。
虽然连接密码可以包含在实例定义中,但这不安全,不建议使用。使用 MySQL Shell 第 4.4 节“可插拔密码存储” 安全存储实例密码。
一旦针对实例发出 dba.configureInstance()
命令,该命令就会检查实例的设置是否适合 InnoDB 集群使用。将显示一个报告,其中显示 InnoDB 集群所需的设置。如果实例不需要对其设置进行任何更改,则可以在 InnoDB 集群中使用它,并且可以继续进行 第 7.4.3 节“创建 InnoDB 集群”。如果实例的设置对于 InnoDB 集群使用无效,则 dba.configureInstance()
命令将显示需要修改的设置。在配置实例之前,系统会提示您确认在表格中显示的更改,表格中包含以下信息
Variable
- 无效的配置变量。Current Value
- 无效配置变量的当前值。Required Value
- 配置变量的所需值。
您的操作方法取决于实例是否支持持久保存设置,请参阅 第 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
之前,请务必谨慎。