根据集群的问题或维护要求,可以使用以下操作来处理其成员服务器。除非另有说明,否则请使用使用 InnoDB Cluster 管理员帐户或服务器配置帐户获取的 Cluster 和 ClusterSet 对象,以便存储在 ClusterSet 对象中的默认用户帐户具有正确的权限。
-
使用
cluster.addInstance()
命令向集群添加更多服务器实例,如 8.4 部署 InnoDB ClusterSet 中的过程所述。有关该命令的更多详细信息,请参阅 第 7.4.4 节“向 InnoDB Cluster 添加实例” 。注意,对于此操作,您需要使用 InnoDB Cluster 服务器配置帐户和使用该帐户获取的 Cluster 对象。该帐户也必须存在于服务器实例上,如 8.3 InnoDB ClusterSet 的用户账户 所述。
当您使用此命令将成员服务器添加到作为 InnoDB ClusterSet 部署一部分的 InnoDB 集群时,服务器实例将添加到集群中,并提供 InnoDB ClusterSet 的数据。在实例上设置 ClusterSet 复制通道,并应用在 InnoDB ClusterSet 部署中运行所需的配置。
-
使用
cluster.rejoinInstance()
命令重新加入以前属于集群但无法自动重新加入集群的服务器实例。有关此操作的详细信息,请参见 第 7.8.1 节“将实例重新加入到集群” 。当您使用此命令将成员服务器重新连接到作为 InnoDB ClusterSet 部署一部分的 InnoDB Cluster 时,服务器实例将重新连接到集群,并提供 InnoDB ClusterSet 的数据。在实例上设置 ClusterSet 复制通道,并应用在 InnoDB ClusterSet 部署中运行所需的配置。
-
使用
cluster.removeInstance()
命令从集群中删除服务器实例。指定要删除的服务器实例的主机名和端口号。有关此操作的详细信息,请参阅 从 InnoDB 集群中删除实例 。可以使用force
选项,但这只能作为最后的手段。当您对 InnoDB ClusterSet 部署中的成员服务器使用此命令时,MySQL Shell 会重置所有应用于 InnoDB ClusterSet 的配置,并重置 ClusterSet 复制通道设置。
-
使用
cluster.setPrimaryInstance(instance)
命令将集群的主服务器更改为其他成员服务器。更改主服务器允许您在当前主服务器上执行维护和升级,或者在组复制自己的选择过程未自动选择所需的主服务器时选择主服务器。指定要作为主服务器实例的主机名和端口号。在 MySQL Shell 8.0.29 中,您可以使用
runningTransactionsTimeout
选项为使用该函数时正在运行的事务指定 0 到 3600 秒之间的超时,这也会停止新的传入事务。超时没有默认设置,因此如果不设置超时,则操作的等待时间没有上限,新事务可以在此期间启动。当您在 InnoDB ClusterSet 部署中对成员服务器使用此命令时,MySQL Shell 会提前停止服务器上的 ClusterSet 复制通道,然后重新启动。此外,如果集群是副本集群,MySQLShell 将主成员保持为只读,而不是像 InnoDB Cluster 的主成员那样使其读写。
-
使用
cluster.forceQuorumUsingPartitionOf(instance)
命令,通过使用剩余的实例强制仲裁,还原已丢失法定人数的集群。使用正确的元数据指定联机服务器实例的主机名和端口号。该操作使集群由该实例和其他可访问实例组成,并排除分区实例。这种操作可能会造成脑裂的情况,因此应将其视为最后的手段。有关此操作的详细信息,请参阅 第 7.8.2 节“从丢失法定人数中恢复集群” 。当您在 InnoDB ClusterSet 部署中对成员服务器使用此命令时,MySQL Shell 将检查目标集群是否仍然是 ClusterSet 的有效部分,并警告您该集群是否已失效。之后,它还会自动重新启动 ClusterSet 复制通道。如果集群是副本集群,MySQL Shell 将主成员保持为只读,而不是像 InnoDB Cluster 的主成员那样使其读写。
-
使用
dba.rebootClusterFromCompleteOutage()
命令重新启动完全脱机的集群。有关此操作的详细信息,请参阅 第 7.8.3 节“从重大停机事故重新启动集群” 。当您在 InnoDB ClusterSet 部署中对成员服务器使用此命令时,MySQLShell 将检查目标集群是否仍然是 ClusterSet 的有效部分,并警告您该集群是否已失效。
如果集群没有失效,MySQL Shell 会在重新启动后立即将其重新加入 InnoDB ClusterSet 部署。如果集群无效,则必须使用
clusterSet.rejoinCluster()
操作将其重新加入 InnoDB ClusterSet 部署。有关此操作的说明,请参阅 8.9.5 将集群重新加入到 InnoDB ClusterSet 。MySQL Shell 也会在执行此操作后自动重新启动 ClusterSet 复制通道。如果集群是副本集群,MySQLShell 将主成员保持为只读,而不是像 InnoDB Cluster 的主成员那样使其读写。
您无法解散当前属于 InnoDB ClusterSet 部署一部分的 InnoDB Cluster, 除非它是 ClusterSet 中唯一的集群或该集群已失效。在所有其他配置中,您必须按照 8.9.4 从 InnoDB ClusterSet 中移除集群 中的说明将其从 InnoDB ClusterSet 中删除。
从 MySQL Shell 8.0.32 开始,如果集群是 ClusterSet 中唯一的集群或集群无效,则可以在集群上使用 dba.dropMetadataSchema()
或 cluster.desolve()
。