如果一个实例离开了集群,例如因为它失去了连接,并且由于某种原因它无法自动重新加入集群,那么可能需要在稍后阶段将其重新加入集群。要将实例重新加入集群,请发出
。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
选项传递给
方法,因为从集群的角度来看,该实例不可达,但我们希望无论如何都将其从 InnoDB 集群元数据中删除。Cluster
.removeInstance()
rejoinInstance()
还会检查实例使用的通信栈,并确保集群支持该通信栈。如果集群支持该通信栈,rejoinInstance()
会将实例添加到集群中。