如果无法修复集群,可以使用 *
clusterSet*.removeCluster()
命令将其从 InnoDB ClusterSet 中删除。force
如果根本无法联系集群,则可以使用 一个选项。
重要的
无法使用此命令删除 InnoDB ClusterSet 中的主集群。如果确实需要删除主集群,则必须首先执行受控切换(请参阅 第 8.7 节,“InnoDB ClusterSet 受控切换”)或紧急故障转移(请参阅 第 8.8 节,“InnoDB ClusterSet 紧急故障转移”)以降级主集群集群升级为副本集群,并将其中一个副本集群提升为主集群。之后,可以使用此过程删除以前的主集群。
删除的 InnoDB Cluster 无法添加回 InnoDB ClusterSet 部署中。如果您想再次在部署中使用服务器实例,则需要使用它们设置一个新集群。
要从 InnoDB ClusterSet 中删除集群,请按照以下过程操作:
-
使用 MySQL Shell,使用 InnoDB Cluster 管理员帐户(使用 创建)连接到主集群或副本集群之一中的任何成员服务器
*
cluster*.setupAdminAccount()
。您还可以使用 InnoDB Cluster 服务器配置帐户,该帐户也具有所需的权限。当连接建立后,ClusterSet
使用dba.getClusterSet()
或*
cluster*.getClusterSet()
命令获取对象。使用 InnoDB Cluster 管理员帐户或服务器配置帐户非常重要,以便存储在对象中的默认用户帐户ClusterSet
具有正确的权限。例如:解释mysql-js> \connect admin2@127.0.0.1:4410
Creating a session to 'admin2@127.0.0.1:4410'
Please provide the password for 'admin2@127.0.0.1:4410': ********
Save password for 'admin2@127.0.0.1:4410'? [Y]es/[N]o/Ne[v]er (default No):
Fetching schema names for autocompletion... Press ^C to stop.
Closing old connection...
Your MySQL connection id is 33
Server version: 8.0.27-commercial MySQL Enterprise Server - Commercial
No default schema selected; type \use to set one.mysql-js> myclusterset = dba.getClusterSet()
-
使用 MySQL Shell 中的 AdminAPI 功能检查整个部署的状态
*
clusterSet*.status()
。例如:mysql-js> myclusterset.status({extended: 1})
有关输出的说明,请参见 第 8.6 节 “InnoDB ClusterSet 状态和拓扑”。
当您发出该
*
clusterSet*.removeCluster()
命令时,InnoDB ClusterSet 部署中必须有一个活动且可访问的主集群,并且这不能是您要删除的集群。您要删除的集群当前必须具有副本集群的状态。它可以失效,并且不必可达。 -
*
clusterSet*.routingOptions()
通过在连接到 InnoDB ClusterSet 部署中的任何成员服务器时在 MySQL Shell 中发出命令,检查为每个 MySQL Router 实例设置的路由选项以及 InnoDB ClusterSet 部署 的全局策略 。验证没有 MySQL Router 实例将流量路由到您要删除的集群。如果有,您必须更改它们的设置以使用命令将流量路由到另一个集群 ,如第 8.5 节 “将 MySQL 路由器与 InnoDB ClusterSet 集成”*
clusterSet*.setRoutingOption()
中所述 。如果 InnoDB ClusterSet 部署已知的任何 MySQL Router 实例正在将流量路由到集群,则无法删除该集群。 -
发出
*
clusterSet*.removeCluster()
命令,命名要从 InnoDB ClusterSet 中删除的集群。例如:解释mysql-js> myclusterset.removeCluster('clusterone')
The Cluster 'clusterone' will be removed from the InnoDB ClusterSet.* Waiting for the Cluster to synchronize with the PRIMARY Cluster...
** Transactions replicated ############################################################ 100%
* Updating topology
** Transactions replicated ############################################################ 100%
* Stopping and deleting ClusterSet managed replication channel...The Cluster 'clusterone' was removed from the ClusterSet.
- 该*
clusterName
*参数是必需的,指定用于 InnoDB ClusterSet 中集群的标识符,如命令输出中给出的*
clusterSet*.status()
。在示例中,*
clusterone*
是要删除的集群。 dryRun
如果您想执行验证并记录更改而不实际执行它们, 请使用该选项。- 使用该
timeout
选项指定等待集群与 InnoDB ClusterSet 中的主集群同步的最大秒数。 - 当集群的主实例不可访问时,使用该
force
选项从 ClusterSet 中删除集群。
当您发出该
*
clusterSet*.removeCluster()
命令时,MySQL Shell 会检查 InnoDB ClusterSet 部署中的主集群是否可达、目标集群不是主集群以及没有 MySQL Router 实例将流量路由到目标集群。如果不满足其中任何条件,则会返回错误。如果满足,MySQL Shell 将执行以下任务以从 InnoDB ClusterSet 中删除目标集群:- 删除为目标集群上的 ClusterSet 复制通道创建的复制用户。
- 将目标集群的主服务器与InnoDB ClusterSet的主集群进行同步,并等待所有事务在本地应用。如果超时在此完成之前到期,则操作将失败。如果同步不起作用,请使用该
force
选项重试。 - 停止 ClusterSet 复制通道,然后删除该通道并将其配置重置为默认值。
- 从 InnoDB ClusterSet 元数据中删除目标集群的元数据和成员信息。
- 保留
super_read_only
所有成员服务器上的系统变量集,以确保不对它们执行更新。
- 该*
-
*
clusterSet*.status()
使用该选项再次 发出 命令extended
,以验证 InnoDB ClusterSet 部署的状态。 -
删除的 InnoDB Cluster 无法添加回 InnoDB ClusterSet 部署中,因此如果您想再次使用部署中的服务器实例,则需要使用独立实例设置一个新集群。从 MySQL Shell 8.0.28 开始,InnoDB Cluster 在删除过程中隐式解散,以便所有成员都成为独立实例。在 MySQL Shell 8.0.27 中,按照解散 InnoDB 集群中的说明手动解散集群 。
请注意,组复制配置不会从服务器实例中删除,因此在 InnoDB ClusterSet 部署中重用这些配置时应小心谨慎,如第 8.1 节 “InnoDB ClusterSet 要求”中所述。由于实例是针对 InnoDB ClusterSet 部署进行配置的,因此出现问题的可能性较低,但您应该意识到潜在的配置差异,尤其是在不同的 InnoDB ClusterSet 部署中重用实例时。