如果无法修复集群,可以使用
命令将其从 InnoDB ClusterSet 中删除。clusterSet.removeCluster()force如果根本无法联系集群,则可以使用
一个选项。
无法使用此命令删除 InnoDB ClusterSet 中的主集群。如果确实需要删除主集群,则必须首先执行受控切换(请参阅 第 8.7 节,“InnoDB ClusterSet 受控切换”)或紧急故障转移(请参阅 第 8.8 节,“InnoDB ClusterSet 紧急故障转移”)以降级主集群集群到副本集群,并将其中一个副本集群提升为主集群。之后,可以使用此过程删除以前的主集群。
无法将已删除的 InnoDB Cluster 添加回 InnoDB ClusterSet 部署。如果要在部署中再次使用服务器实例,则需要使用它们设置一个新集群。
要从 InnoDB ClusterSet 中删除集群,请遵循以下过程:
-
使用 MySQL Shell,使用 InnoDB Cluster 管理员帐户(使用创建
)连接到主集群或其中一个副本集群中的任何成员服务器。您还可以使用 InnoDB Cluster 服务器配置帐户,该帐户也具有所需的权限。建立连接后, 使用或 命令获取cluster.setupAdminAccount()ClusterSet对象 。使用 InnoDB Cluster 管理员帐户或服务器配置帐户很重要,这样存储在 对象中的默认用户帐户具有正确的权限。例如:dba.getClusterSet()cluster.getClusterSet()ClusterSetmysql-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 <schema> to set one. <ClassicSession:admin2@127.0.0.1:4410> mysql-js> myclusterset = dba.getClusterSet() <ClusterSet:testclusterset> -
使用MySQL Shell 中 的 AdminAPI 函数检查整个部署的状态 。例如:clusterSet.status()mysql-js> myclusterset.status({extended: 1})有关输出的解释,请参阅 第 8.6 节,“InnoDB ClusterSet 状态和拓扑”。
当您发出
命令时,InnoDB ClusterSet 部署中必须有一个活动且可访问的主集群,并且这不能是您要删除的集群。您要删除的集群当前必须具有副本集群的状态。它可以无效,并且不必可达。clusterSet.removeCluster() 检查为每个 MySQL Router 实例设置的路由选项,以及 InnoDB ClusterSet 部署的全局策略,方法是
在连接到 InnoDB ClusterSet 部署中的任何成员服务器时在 MySQL Shell 中发出。确认没有 MySQL Router 实例将流量路由到您要删除的集群。如果有,您必须更改它们的设置以使用clusterSet.routingOptions()命令将流量路由到另一个集群,如 第 8.5 节“将 MySQL 路由器与 InnoDB ClusterSet 集成”中所述. 如果 InnoDB ClusterSet 部署已知的任何 MySQL Router 实例正在将流量路由到它,则无法删除集群。clusterSet.setRoutingOption()-
发出
命令,命名要从 InnoDB ClusterSet 中删除的集群。例如:clusterSet.removeCluster()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()是要删除的集群。clusteronedryRun如果您想执行验证并记录更改而不实际执行它们, 请使用该选项。使用该
timeout选项指定等待集群与 InnoDB ClusterSet 中的主集群同步的最大秒数。force当集群的主实例不可访问时, 使用该选项从 ClusterSet 中删除集群。
当您发出
命令时,MySQL Shell 检查 InnoDB ClusterSet 部署中的主集群是否可达,目标集群不是主集群,并且没有 MySQL Router 实例将流量路由到目标集群。如果不满足这些条件中的任何一个,则会返回错误。如果满足,MySQL Shell 将执行以下任务以从 InnoDB ClusterSet 中删除目标集群:clusterSet.removeCluster()删除为目标集群上的 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 中,按照 Dissolving an InnoDB Cluster中的说明手动解散集群。
请注意,组复制配置不会从服务器实例中删除,因此在 InnoDB ClusterSet 部署中重用这些配置时应谨慎行事,如 第 8.1 节“InnoDB ClusterSet 要求”中所述。由于实例是为 InnoDB ClusterSet 部署配置的,因此出现问题的可能性较低,但您应该意识到配置差异的可能性,尤其是当实例在不同的 InnoDB ClusterSet 部署中重用时。