MySQL Shell 9.0  /  ...  /  重新扫描集群

7.8.4 重新扫描集群

如果您对集群进行了配置更改,但没有使用 AdminAPI 命令,例如通过手动更改实例配置来解决配置问题,或者在丢失实例之后,您需要更新 InnoDB 集群元数据,使其与实例的当前配置匹配。 在这些情况下,使用 Cluster.rescan() 操作,该操作使您能够手动或使用交互式向导更新 InnoDB 集群元数据。 Cluster.rescan() 操作可以检测元数据中未注册的新活动实例并添加它们,或者检测元数据中仍然注册的已过时的实例(不再活动)并删除它们。 您可以根据命令找到的实例自动更新元数据,也可以指定要添加到元数据或从元数据中删除的实例地址列表。 您还可以更新元数据中存储的拓扑模式,例如在 AdminAPI 之外从单主模式更改为多主模式之后。

注意

group_replication_transaction_size_limit 在副本集群中设置为最大值。 原始值存储在元数据模式中,并在切换或故障转移的情况下由 Cluster.rescan() 恢复。

该命令的语法为 Cluster.rescan([options])options 字典支持以下内容

  • addInstances:包含要添加到元数据的新的活动实例的连接数据的列表,或 auto 以自动将丢失的实例添加到元数据。 值 auto 不区分大小写。

    • 列表中指定的实例将添加到元数据中,不会提示确认。

    • 在交互模式下,系统将提示您确认添加未包含在 addInstances 选项中的新发现的实例。

    • 在非交互模式下,未包含在 addInstances 选项中的新发现的实例将在输出中报告,但不会提示您添加它们。

  • removeInstances:包含要从元数据中删除的已过时实例的连接数据的列表,或 auto 以自动从元数据中删除已过时的实例。

    • 列表中指定的实例将从元数据中删除,不会提示确认。

    • 在交互模式下,系统将提示您确认删除未包含在 removeInstances 选项中的已过时的实例。

    • 在非交互模式下,未包含在 removeInstances 选项中的已过时的实例将在输出中报告,但不会提示您删除它们。

  • updateViewChangeUuid:布尔值,用于指示是否应为 group_replication_view_change_uuid 系统变量在集群实例上生成并设置值。

    注意

    对于运行 MySQL Server 8.3.0 或更高版本的集群,这不是必需的。

    此系统变量为组生成的视图更改事件提供替代 UUID。 对于版本 8.0.27 及更高版本的 MySQL Server 实例,对于属于 InnoDB 集群集的 InnoDB 集群,group_replication_view_change_uuid 系统变量是必需的,并且必须在集群中的所有成员服务器上设置为相同的值。 使用 dba.createCluster() 命令创建的 InnoDB 集群将为所有成员服务器生成并设置系统变量的值。 在 MySQL Shell 8.0.27 之前创建的 InnoDB 集群可能没有设置系统变量,但 InnoDB 集群集创建过程将检查这一点,如果缺失,则会显示警告并失败。

    默认情况下,updateViewChangeUuid 设置为 false,如果在任何实例上找不到系统变量或系统变量不匹配,则会返回警告消息,让您知道您必须设置系统变量的值并重启 InnoDB 集群。 如果将 updateViewChangeUuid 设置为 true,则重新扫描操作将在所有成员服务器上为 group_replication_view_change_uuid 生成并设置一个值,之后您必须重启集群以实施更改。 Cluster.rescan() 命令会像设置了 true 一样自动生成并设置系统变量值,之后需要重启集群以实施更改。 重启集群后,您可以重试 InnoDB 集群集创建过程。

  • upgradeCommProtocol:布尔值,用于指示是否应将 Group Replication 通信协议版本升级(true)或不升级(false)到集群中最低 MySQL 版本的实例支持的版本。 默认情况下,通信协议版本不会升级(false)。 导致拓扑更改的 AdminAPI 操作如果通信协议版本可以升级,则会返回消息,您可以使用此选项在适当的时间执行升级。 建议升级到 Group Replication 通信协议的最高可用版本,以支持最新功能,例如用于大型事务的消息分段。 有关详细信息,请参阅 设置组的通信协议版本

    • 如果值为 true,则 Group Replication 通信协议版本将升级到集群中最低 MySQL 版本的实例支持的版本。

    • 如果值为 false,则 Group Replication 通信协议版本不会升级。