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])
whereinstance是一个实例定义,并且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 集群所需的配置更改。同样,如果您修改集群结构,例如更改实例数量,则需要对每个服务器实例重复此过程,以相应地为集群中的每个实例更新 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://dev.mysql.com/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。




