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

7.8.1 将实例重新加入群集

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

提示

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

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

如果您重新加入的实例在某些方面发生了更改,则您可能必须修改该实例以使重新加入过程正常工作。例如,当您恢复 MySQL 企业版备份备份时,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() 会将实例添加到群集。