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

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 ClusterSet 的 InnoDB 集群,需要 group_replication_view_change_uuid 系统变量,并且必须在集群中的所有成员服务器上将其设置为相同的值。 使用 dba.createCluster() 命令创建的 InnoDB 集群会在所有成员服务器上生成并设置系统变量的值。 在 MySQL Shell 8.0.27 之前创建的 InnoDB 集群可能没有设置系统变量,但 InnoDB ClusterSet 创建过程会检查这一点,如果缺少该变量,则会发出警告。

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

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

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

    • 如果值为 false,则不会升级组复制通信协议版本。