如果无法修复集群,可以使用 命令将其从 InnoDB ClusterSet 中移除。如果无法联系到集群,可以使用 clusterSet.removeCluster()force 选项。
无法使用此命令移除 InnoDB ClusterSet 中的主集群。如果确实需要移除主集群,则必须先执行受控切换(请参阅第 8.7 节“InnoDB ClusterSet 受控切换”)或紧急故障转移(请参阅第 8.8 节“InnoDB ClusterSet 紧急故障转移”),将主集群降级为副本集群,并将其中一个副本集群提升为主集群。之后,可以使用此过程移除以前的主集群。
移除的 InnoDB 集群无法添加回 InnoDB ClusterSet 部署。如果要再次使用部署中的服务器实例,则需要使用它们设置新的集群。
要从 InnoDB ClusterSet 中移除集群,请按照以下步骤操作
-
使用 MySQL Shell,使用 InnoDB 集群管理员帐户(使用
创建)连接到主集群或其中一个副本集群中的任何成员服务器。您也可以使用 InnoDB 集群服务器配置帐户,该帐户也具有所需的权限。建立连接后,使用cluster.setupAdminAccount()dba.getClusterSet()或命令获取cluster.getClusterSet()ClusterSet对象。务必使用 InnoDB 集群管理员帐户或服务器配置帐户,以便存储在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 <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() 通过连接到 InnoDB ClusterSet 部署中的任何成员服务器并在 MySQL Shell 中发出
,检查为每个 MySQL Router 实例设置的路由选项以及 InnoDB ClusterSet 部署的全局策略。验证没有 MySQL Router 实例将流量路由到要移除的集群。如果有,则必须使用clusterSet.routingOptions()命令更改其设置以将流量路由到另一个集群,如第 8.5 节“将 MySQL Router 与 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()是要移除的集群。clusterone如果要执行验证并记录更改而不实际执行它们,请使用
dryRun选项。使用
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系统变量设置为确保不在其上执行任何更新。
使用
extended选项再次发出命令,以验证 InnoDB ClusterSet 部署的状态。clusterSet.status()-
移除的 InnoDB 集群无法添加回 InnoDB ClusterSet 部署,因此如果要再次使用部署中的服务器实例,则需要使用独立实例设置新的集群。InnoDB 集群在移除过程中隐式解散,以便所有成员都成为独立实例。
请注意,不会从服务器实例中移除组复制配置,因此在 InnoDB ClusterSet 部署中重用这些实例时应谨慎操作,如第 8.1 节“InnoDB ClusterSet 要求”中所述。由于这些实例是为 InnoDB ClusterSet 部署配置的,因此出现问题的可能性较低,但您应该注意潜在的配置差异,尤其是在不同的 InnoDB ClusterSet 部署中重用这些实例时。