删除 Aurora 数据库集群和数据库实例 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

删除 Aurora 数据库集群和数据库实例

当您不再需要 Aurora 数据库集群时,可以将其删除。这样做会删除包含您所有数据的集群卷。删除集群之前,您可以保存数据的快照。您可以稍后还原快照,创建包含相同数据的新集群。

您还可以从集群中删除数据库实例,同时保留集群本身及其包含的数据。如果集群不繁忙且不需要多个数据库实例的计算容量,这样做可以帮助您降低费用。

删除 Aurora 数据库集群

Aurora 不提供删除数据库集群的单步方法。此设计选择旨在防止您意外丢失数据或使应用程序离线。Aurora 应用程序通常是任务关键型应用程序,需要高可用性。因此,Aurora 通过添加和删除数据库实例,可以轻松地向上和向下扩展集群的容量。但是,删除集群本身需要您做出单独的选择。

使用以下常规程序从集群中删除所有数据库实例,然后删除集群本身。

  1. 删除集群中的所有读取器实例。使用 从 Aurora 数据库集群中删除数据库实例 中的程序。如果集群有任何读取器实例,删除其中一个实例只会降低集群的计算能力。删除读取器实例首先可确保集群在整个程序中始终可用,并且不会执行不必要的故障切换操作。

  2. 从集群中删除写入器实例。再次使用 从 Aurora 数据库集群中删除数据库实例 中的程序。

    如果您使用 Amazon Web Services Management Console,这是最后一步。通过控制台删除数据库集群中的最终数据库实例,会自动删除数据库集群和集群卷中的数据。此时,Aurora 会提示您在删除集群之前可选择创建快照。Aurora 还会要求您确认是否要删除集群。

  3. 仅限 CLI 和 API:如果您使用 Amazon CLI 或 RDS API 删除数据库实例,那么即使在删除所有数据库实例后,集群及其关联的集群卷仍会保持不变。要删除集群本身,请在集群没有关联的数据库实例时调用 delete-db-cluster CLI 命令或 DeleteDBCluster API 操作。此时,您可以选择是否创建集群卷的快照。这样做可保留集群中的数据,以备今后之需。

删除空 Aurora 集群

如果您使用 Amazon Web Services Management Console,Aurora 会在您删除集群中的最后一个数据库实例时自动删除该集群。因此,删除空集群的步骤仅在您使用 Amazon CLI 或 RDS API 时适用。

提示

您可以保留没有数据库实例的集群,这样就能够在不产生集群 CPU 费用的前提下保留数据。您可以通过为集群创建一个或多个新的数据库实例来快速开始使用集群。您可以在集群没有任何关联的数据库实例的情况下对集群执行 Aurora 特定的管理操作。您无法访问数据或执行任何需要连接到数据库实例的操作。

要使用 Amazon CLI 删除空 Aurora 数据库集群,请调用 delete-db-cluster 命令。

要使用 Amazon RDS API 删除空 Aurora 数据库集群,请调用 DeleteDBInstance 操作。

假设空集群 deleteme-zero-instances 仅用于开发和测试,不包含任何重要数据。在这种情况下,删除集群时不需要保留集群卷的快照。以下示例显示了集群不包含任何数据库实例,并随后在不创建最终快照的情况下删除空集群。

$ aws rds describe-db-clusters --db-cluster-identifier deleteme-zero-instances --output text \ --query '*[].["Cluster:",DBClusterIdentifier,DBClusterMembers[*].["Instance:",DBInstanceIdentifier,IsClusterWriter]] Cluster: deleteme-zero-instances $ aws rds delete-db-cluster --db-cluster-identifier deleteme-zero-instances --skip-final-snapshot { "DBClusterIdentifier": "deleteme-zero-instances", "Status": "available", "Engine": "aurora-mysql" }

删除具有单个数据库实例的 Aurora 集群

如果尝试删除 Aurora 集群中的最后一个数据库实例,该行为取决于您使用的方法。您可以使用 Amazon Web Services Management Console来删除最后一个数据库实例。这样做也会删除数据库集群。即使数据库集群启用了删除保护,也可以通过 Amazon CLI 或 API 删除最后一个数据库实例。在这种情况下,数据库集群本身仍然存在,您的数据将被保留。您可以将新的数据库实例附加到集群以再次访问数据。

以下示例显示当集群仍有任何关联的数据库实例时,该 delete-db-cluster 命令不起作用。此集群有单个写入器数据库实例。当我们检查集群中的数据库实例时,我们会检查每个实例的 IsClusterWriter 属性。集群可能有零个或一个写入器数据库实例。true 的值表示写入器数据库实例。false 的值表示读取器数据库实例。集群可能有零个、一个或多个读取数据库实例。在这种情况下,我们使用 delete-db-instance 命令删除写入器数据库实例。一旦数据库实例进入 deleting 状态,我们也可以删除集群。另外对于此示例,假设集群不包含任何值得保留的数据,因此我们不创建集群卷的快照。

$ aws rds delete-db-cluster --db-cluster-identifier deleteme-writer-only --skip-final-snapshot An error occurred (InvalidDBClusterStateFault) when calling the DeleteDBCluster operation: Cluster cannot be deleted, it still contains DB instances in non-deleting state. $ aws rds describe-db-clusters --db-cluster-identifier deleteme-writer-only \ --query '*[].[DBClusterIdentifier,Status,DBClusterMembers[*].[DBInstanceIdentifier,IsClusterWriter]]' [ [ "deleteme-writer-only", "available", [ [ "instance-2130", true ] ] ] ] $ aws rds delete-db-instance --db-instance-identifier instance-2130 { "DBInstanceIdentifier": "instance-2130", "DBInstanceStatus": "deleting", "Engine": "aurora-mysql" } $ aws rds delete-db-cluster --db-cluster-identifier deleteme-writer-only --skip-final-snapshot { "DBClusterIdentifier": "deleteme-writer-only", "Status": "available", "Engine": "aurora-mysql" }

删除包含多个数据库实例的 Aurora 集群

如果您的集群包含多个数据库实例,通常会有一个写入器实例和一个或多个读取器实例。读取器实例通过在写入器实例遇到问题时处于备用状态以进行接管,来帮助实现高可用性。您还可以使用读取器实例向上扩展集群以处理读取密集型工作负载,而不会增加写入程序实例的开销。

要删除具有多个读取器数据库实例的集群,首先删除读取器实例,然后删除写入器实例。如果您使用 Amazon Web Services Management Console,则删除写入器实例之后会自动删除该集群。如果您使用 Amazon CLI 或 RDS API,则删除写入器实例会原地保留集群及其数据。在这种情况下,您可通过单独的命令或 API 操作删除集群。

此示例说明如何删除包含写入器数据库实例和单个读取器数据库实例的集群。describe-db-clusters 输出显示 instance-7384 是写入器实例,而 instance-1039 是读取器实例。该示例首先删除读取器实例,因为在读取器实例仍存在的情况下删除写入器实例将导致故障转移操作。如果您也计划删除读取器实例,将读取器实例提升到写入器没有意义。同样,假设这些 db.t2.small 实例仅用于开发和测试,因此删除操作会跳过最终快照。

$ aws rds delete-db-cluster --db-cluster-identifier deleteme-writer-and-reader --skip-final-snapshot An error occurred (InvalidDBClusterStateFault) when calling the DeleteDBCluster operation: Cluster cannot be deleted, it still contains DB instances in non-deleting state. $ aws rds describe-db-clusters --db-cluster-identifier deleteme-writer-and-reader --output text \ --query '*[].["Cluster:",DBClusterIdentifier,DBClusterMembers[*].["Instance:",DBInstanceIdentifier,IsClusterWriter]] Cluster: deleteme-writer-and-reader Instance: instance-1039 False Instance: instance-7384 True $ aws rds delete-db-instance --db-instance-identifier instance-1039 { "DBInstanceIdentifier": "instance-1039", "DBInstanceStatus": "deleting", "Engine": "aurora-mysql" } $ aws rds delete-db-instance --db-instance-identifier instance-7384 { "DBInstanceIdentifier": "instance-7384", "DBInstanceStatus": "deleting", "Engine": "aurora-mysql" } $ aws rds delete-db-cluster --db-cluster-identifier deleteme-writer-and-reader --skip-final-snapshot { "DBClusterIdentifier": "deleteme-writer-and-reader", "Status": "available", "Engine": "aurora-mysql" }

以下示例说明如何删除包含写入器数据库实例和多个读取器数据库实例的数据库集群。它使用 describe-db-clusters 命令的简明输出来获取写入器和读取器实例的报告。同样,我们在删除写入数据库实例之前会删除所有读取器数据库实例。无需考虑我们删除读取器数据库实例的顺序。假设此包含多个数据库实例的集群确实包含值得保留的数据。因此,本示例中的 delete-db-cluster 命令包括 --no-skip-final-snapshot--final-db-snapshot-identifier 参数,用于指定要创建的快照的详细信息。

$ aws rds describe-db-clusters --db-cluster-identifier deleteme-multiple-readers --output text \ --query '*[].["Cluster:",DBClusterIdentifier,DBClusterMembers[*].["Instance:",DBInstanceIdentifier,IsClusterWriter]] Cluster: deleteme-multiple-readers Instance: instance-1010 False Instance: instance-5410 False Instance: instance-9948 False Instance: instance-8451 True $ aws rds delete-db-instance --db-instance-identifier instance-1010 { "DBInstanceIdentifier": "instance-1010", "DBInstanceStatus": "deleting", "Engine": "aurora-mysql" } $ aws rds delete-db-instance --db-instance-identifier instance-5410 { "DBInstanceIdentifier": "instance-5410", "DBInstanceStatus": "deleting", "Engine": "aurora-mysql" } $ aws rds delete-db-instance --db-instance-identifier instance-9948 { "DBInstanceIdentifier": "instance-9948", "DBInstanceStatus": "deleting", "Engine": "aurora-mysql" } $ aws rds delete-db-instance --db-instance-identifier instance-8451 { "DBInstanceIdentifier": "instance-8451", "DBInstanceStatus": "deleting", "Engine": "aurora-mysql" } $ aws rds delete-db-cluster --db-cluster-identifier deleteme-multiple-readers --no-skip-final-snapshot \ --final-db-snapshot-identifier deleteme-multiple-readers-snapshot-11-7087 { "DBClusterIdentifier": "deleteme-multiple-readers", "Status": "available", "Engine": "aurora-mysql" }

以下示例说明如何确认 Aurora 创建了请求的快照。您可以通过指定特定快照的标识符 deleteme-multiple-readers-snapshot-11-7087 来请求其详细信息。您还可以通过指定集群标识符 deleteme-multiple-readers 来获取已删除集群的所有快照的报告。这两个命令都返回有关同一快照的信息。

$ aws rds describe-db-cluster-snapshots --db-cluster-snapshot-identifier deleteme-multiple-readers-snapshot-11-7087 { "DBClusterSnapshots": [ { "AvailabilityZones": [], "DBClusterSnapshotIdentifier": "deleteme-multiple-readers-snapshot-11-7087", "DBClusterIdentifier": "deleteme-multiple-readers", "SnapshotCreateTime": "11T01:40:07.354000+00:00", "Engine": "aurora-mysql", ... $ aws rds describe-db-cluster-snapshots --db-cluster-identifier deleteme-multiple-readers { "DBClusterSnapshots": [ { "AvailabilityZones": [], "DBClusterSnapshotIdentifier": "deleteme-multiple-readers-snapshot-11-7087", "DBClusterIdentifier": "deleteme-multiple-readers", "SnapshotCreateTime": "11T01:40:07.354000+00:00", "Engine": "aurora-mysql", ...

Aurora 集群的删除保护

您无法删除已启用删除保护的集群。您可以删除集群中的数据库实例,但不能删除集群本身。这样,包含所有数据的集群卷就可以免遭意外删除。无论您尝试使用控制台、Amazon CLI 或是 RDS API 删除集群,Aurora 都会为数据库集群强制执行删除保护。

在使用 Amazon Web Services Management Console 创建生产数据库集群时,将默认启用删除保护。但是,如果您使用 Amazon CLI 或 API 创建集群,将默认禁用删除保护。启用或禁用删除保护不会导致中断。要能够删除集群,请修改集群并禁用删除保护。有关打开和关闭删除保护的更多信息,请参阅 使用控制台、CLI 和 API 修改数据库集群

提示

即使删除了所有数据库实例,您也可以通过在集群中创建新的数据库实例来访问数据。

删除已停止的 Aurora 集群

如果集群处于 stopped 状态,则无法将其删除。在这种情况下,请在删除集群之前启动集群。有关更多信息,请参阅 启动 Aurora 数据库集群

删除作为只读副本的 Aurora MySQL 集群

对于 Aurora MySQL,如果同时满足以下两个条件,则无法删除数据库集群中的数据库实例:

  • 该数据库集群是另一个 Aurora 数据库集群的只读副本。

  • 该数据库实例是该数据库集群的唯一实例。

在这种情况下,要删除数据库实例,请先提升数据库集群,以使其不再是只读副本。升级完成后,可以删除数据库集群中的最终数据库实例。有关更多信息,请参阅跨 Amazon 区域复制 Amazon Aurora MySQL 数据库集群

从 Aurora 数据库集群中删除数据库实例

作为删除整个集群过程的一部分,您可以从 Aurora 数据库集群中删除数据库实例。如果您的集群包含一定数量的数据库实例,则删除集群需要删除其中的每个数据库实例。您还可以在保持集群运行的同时从集群中删除一个或多个读取器实例。您可以在集群不繁忙时这样做,以减少计算容量和相关费用。

若要删除某个数据库实例,您必须指定该实例的名称。

您可以使用 Amazon Web Services Management Console、Amazon CLI 或 RDS API 删除数据库实例。

对于 Aurora 数据库集群,删除数据库实例不一定会删除整个集群。您可以在集群不繁忙时删除 Aurora 集群中的数据库实例,以减少计算容量和相关费用。有关具有一个数据库实例或零个数据库实例的 Aurora 集群的特殊情况的信息,请参阅 删除具有单个数据库实例的 Aurora 集群删除空 Aurora 集群

注意

当数据库集群启用了删除保护时,您无法删除该集群。有关更多信息,请参阅 Aurora 集群的删除保护

您可以通过修改数据库集群来禁用删除保护。有关更多信息,请参阅 修改 Amazon Aurora 数据库集群

删除数据库实例

  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Databases (数据库),然后选择要删除的数据库实例。

  3. 对于 Actions,选择 Delete

  4. 在框中输入 delete me

  5. 选择 Delete

要使用 Amazon CLI 删除数据库实例,请调用 delete-db-instance 命令并指定 --db-instance-identifier 值。

对于 Linux、macOS 或 Unix:

aws rds delete-db-instance \ --db-instance-identifier mydbinstance

对于 Windows:

aws rds delete-db-instance ^ --db-instance-identifier mydbinstance

要使用 Amazon RDS API 删除数据库实例,请调用 DeleteDBInstance 操作并指定 DBInstanceIdentifier 参数。

注意

当数据库实例的状态为 deleting 时,其 CA 证书值不会显示在 RDS 控制台中或 Amazon CLI 命令或 RDS API 操作的输出中。有关 CA 证书的更多信息,请参阅 使用 SSL/TLS 加密与数据库集群的连接