MySQL Shell 9.0  /  ...  /  将实例重新加入集群

7.8.1 将实例重新加入集群

如果一个实例离开了集群,例如因为它失去了连接,并且由于某种原因它无法自动重新加入集群,那么可能需要在稍后阶段将其重新加入集群。要将实例重新加入集群,请发出 Cluster.rejoinInstance(instance)

提示

如果实例具有 super_read_only=ON,那么您可能需要确认 AdminAPI 可以设置 super_read_only=OFF。有关更多信息,请参见 超级只读模式下的实例配置

如果实例没有持久化其配置(请参见 第 6.2.3 节,“持久化设置”),则在重启时,实例不会自动重新加入集群。解决方案是发出 cluster.rejoinInstance(),以便再次将实例添加到集群中,并确保更改被持久化。一旦 InnoDB 集群配置被持久化到实例的选项文件中,它就会自动重新加入集群。

如果您要重新加入一个以某种方式更改过的实例,则您可能必须修改该实例以使重新加入过程正常工作。例如,当您还原 MySQL Enterprise Backup 备份时,server_uuid 会发生变化。尝试重新加入此类实例会失败,因为 InnoDB 集群实例是通过 server_uuid 变量标识的。在这种情况下,必须从 InnoDB 集群元数据中删除有关实例的旧 server_uuid 的信息,然后必须执行 Cluster.rescan() 以使用其新的 server_uuid 将实例添加到元数据中。例如

cluster.removeInstance("root@instanceWithOldUUID:3306", {force: true})

cluster.rescan()

在这种情况下,您必须将 force 选项传递给 Cluster.removeInstance() 方法,因为从集群的角度来看,该实例不可达,但我们希望无论如何都将其从 InnoDB 集群元数据中删除。

rejoinInstance() 还会检查实例使用的通信栈,并确保集群支持该通信栈。如果集群支持该通信栈,rejoinInstance() 会将实例添加到集群中。