8.9.4 从 InnoDB ClusterSet 中删除集群

2024年 3月 2日 27.8k 0

如果无法修复集群,可以使用 *clusterSet*.removeCluster() 命令将其从 InnoDB ClusterSet 中删除。force如果根本无法联系集群,则可以使用 一个选项。

重要的

无法使用此命令删除 InnoDB ClusterSet 中的主集群。如果确实需要删除主集群,则必须首先执行受控切换(请参阅 第 8.7 节,“InnoDB ClusterSet 受控切换”)或紧急故障转移(请参阅 第 8.8 节,“InnoDB ClusterSet 紧急故障转移”)以降级主集群集群升级为副本集群,并将其中一个副本集群提升为主集群。之后,可以使用此过程删除以前的主集群。

删除的 InnoDB Cluster 无法添加回 InnoDB ClusterSet 部署中。如果您想再次在部署中使用服务器实例,则需要使用它们设置一个新集群。

要从 InnoDB ClusterSet 中删除集群,请按照以下过程操作:

  1. 使用 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()

  2. 使用 MySQL Shell 中的 AdminAPI 功能检查整个部署的状态 *clusterSet*.status() 。例如:

    mysql-js> myclusterset.status({extended: 1})

    有关输出的说明,请参见 第 8.6 节 “InnoDB ClusterSet 状态和拓扑”。

    当您发出该 *clusterSet*.removeCluster() 命令时,InnoDB ClusterSet 部署中必须有一个活动且可访问的主集群,并且这不能是您要删除的集群。您要删除的集群当前必须具有副本集群的状态。它可以失效,并且不必可达。

  3. *clusterSet*.routingOptions() 通过在连接到 InnoDB ClusterSet 部署中的任何成员服务器时在 MySQL Shell 中发出命令,检查为每个 MySQL Router 实例设置的路由选项以及 InnoDB ClusterSet 部署 的全局策略 。验证没有 MySQL Router 实例将流量路由到您要删除的集群。如果有,您必须更改它们的设置以使用命令将流量路由到另一个集群 ,如第 8.5 节 “将 MySQL 路由器与 InnoDB ClusterSet 集成”*clusterSet*.setRoutingOption() 中所述 。如果 InnoDB ClusterSet 部署已知的任何 MySQL Router 实例正在将流量路由到集群,则无法删除该集群。

  4. 发出 *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所有成员服务器上的系统变量集,以确保不对它们执行更新。
  5. *clusterSet*.status() 使用该选项再次 发出 命令extended,以验证 InnoDB ClusterSet 部署的状态。

  6. 删除的 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 部署中重用实例时。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论