

# 删除 Aurora 数据库集群和数据库实例
<a name="USER_DeleteCluster"></a>

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

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

**Topics**
+ [删除 Aurora 数据库集群](#USER_DeleteCluster.DeleteCluster)
+ [Aurora 集群的删除保护](#USER_DeletionProtection)
+ [删除已停止的 Aurora 集群](#USER_Deletion_Stopped_Cluster)
+ [删除作为只读副本的 Aurora MySQL 集群](#USER_DeleteInstance.AuroraReplica)
+ [删除集群时的最终快照](#USER_Deletion_Final_Snapshot)
+ [从 Aurora 数据库集群中删除数据库实例](#USER_DeleteInstance)

## 删除 Aurora 数据库集群
<a name="USER_DeleteCluster.DeleteCluster"></a>

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

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

1. 删除集群中的所有读取器实例。使用 [从 Aurora 数据库集群中删除数据库实例](#USER_DeleteInstance) 中的程序。

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

1. 从集群中删除写入器实例。再次使用 [从 Aurora 数据库集群中删除数据库实例](#USER_DeleteInstance) 中的程序。

    当您删除数据库实例时，集群及其关联的集群卷仍保留，即使在删除所有数据库实例后也是如此。

1. 删除数据库集群。
   + **AWS 管理控制台** – 选择集群，然后从**操作**菜单中选择**删除**。您可以选择以下选项来保留集群中的数据，以备日后需要时使用：
     + 创建集群卷的最终快照。默认设置是创建最终快照。
     + 保留自动备份。默认设置是不保留自动备份。
**注意**  
不会保留 Aurora Serverless v1 数据库集群的自动备份。

     Aurora 还会要求您确认是否要删除集群。
   + **CLI 和 API** – 调用 `delete-db-cluster` CLI 命令或 `DeleteDBCluster` API 操作。您可以选择以下选项来保留集群中的数据，以备日后需要时使用：
     + 创建集群卷的最终快照。
     + 保留自动备份。
**注意**  
不会保留 Aurora Serverless v1 数据库集群的自动备份。

**Topics**
+ [删除空 Aurora 集群](#USER_DeleteInstance.Empty)
+ [删除具有单个数据库实例的 Aurora 集群](#USER_DeleteInstance.SingleInstance)
+ [删除包含多个数据库实例的 Aurora 集群](#USER_DeleteInstance.MultipleInstances)

### 删除空 Aurora 集群
<a name="USER_DeleteInstance.Empty"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 Amazon RDS API 删除空的数据库集群。

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

#### 控制台
<a name="delete-db-cluster.CON"></a>

**删除数据库集群**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**数据库**，然后选择要删除的数据库集群。

1. 对于**操作**，选择**删除**。

1. 要为数据库集群创建最终数据库快照，请选择**是否创建最终快照？**。这是默认设置。

1. 如果选择创建最终快照，请输入**最终快照名称**。

1. 要保留自动备份，请选择 **Retain automated backups (保留自动备份)**。这不是默认设置。

1. 在框中输入 **delete me**。

1. 选择 **Delete**。

#### CLI
<a name="delete-db-cluster.CLI"></a>

要使用 AWS CLI 删除空 Aurora 数据库集群，请调用 [delete-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-cluster.html) 命令。

假设空集群 `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 \
  --delete-automated-backups
{
  "DBClusterIdentifier": "deleteme-zero-instances",
  "Status": "available",
  "Engine": "aurora-mysql"
}
```

#### RDS API
<a name="delete-db-cluster.API"></a>

要使用 Amazon RDS API 删除空的 Aurora 数据库集群，请调用 [DeleteDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBCluster.html) 操作。

### 删除具有单个数据库实例的 Aurora 集群
<a name="USER_DeleteInstance.SingleInstance"></a>

您可以删除最后一个数据库实例，即使数据库集群启用了删除保护也是如此。在这种情况下，数据库集群本身仍然存在，您的数据将被保留。您可以将新的数据库实例附加到集群以再次访问数据。

以下示例显示当集群仍有任何关联的数据库实例时，该 `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 \
  --delete-automated-backups
{
  "DBClusterIdentifier": "deleteme-writer-only",
  "Status": "available",
  "Engine": "aurora-mysql"
}
```

### 删除包含多个数据库实例的 Aurora 集群
<a name="USER_DeleteInstance.MultipleInstances"></a>

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

要删除具有多个读取器数据库实例的集群，首先删除读取器实例，然后删除写入器实例。删除写入器实例会原地保留集群及其数据。您可以通过单独的操作删除集群。
+ 有关删除 Aurora 数据库实例的程序，请参阅 [从 Aurora 数据库集群中删除数据库实例](#USER_DeleteInstance)。
+ 有关在 Aurora 集群中删除写入器数据库实例的程序，请参阅 [删除具有单个数据库实例的 Aurora 集群](#USER_DeleteInstance.SingleInstance)。
+ 有关删除空 Aurora 集群的程序，请参阅 [删除空 Aurora 集群](#USER_DeleteInstance.Empty)。

此示例 CLI 说明如何删除包含写入器数据库实例和单个读取器数据库实例的集群。`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 \
  --delete-automated-backups
{
  "DBClusterIdentifier": "deleteme-writer-and-reader",
  "Status": "available",
  "Engine": "aurora-mysql"
}
```

以下示例说明如何删除包含写入器数据库实例和多个读取器数据库实例的数据库集群。它使用 `describe-db-clusters` 命令的简明输出来获取写入器和读取器实例的报告。同样，我们在删除写入数据库实例之前会删除所有读取器数据库实例。无需考虑我们删除读取器数据库实例的顺序。

假设此包含多个数据库实例的集群确实包含值得保留的数据。因此，本示例中的 `delete-db-cluster` 命令包括 `--no-skip-final-snapshot` 和 `--final-db-snapshot-identifier` 参数，用于指定要创建的快照的详细信息。它还包括用于保留自动备份的 `--no-delete-automated-backups` 参数。

```
$ 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-delete-automated-backups \
  --no-skip-final-snapshot \
  --final-db-snapshot-identifier deleteme-multiple-readers-final-snapshot
{
  "DBClusterIdentifier": "deleteme-multiple-readers",
  "Status": "available",
  "Engine": "aurora-mysql"
}
```

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

```
$ aws rds describe-db-cluster-snapshots \
  --db-cluster-snapshot-identifier deleteme-multiple-readers-final-snapshot
{
    "DBClusterSnapshots": [
        {
            "AvailabilityZones": [],
            "DBClusterSnapshotIdentifier": "deleteme-multiple-readers-final-snapshot",
            "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-final-snapshot",
            "DBClusterIdentifier": "deleteme-multiple-readers",
            "SnapshotCreateTime": "11T01:40:07.354000+00:00",
            "Engine": "aurora-mysql",
...
```

## Aurora 集群的删除保护
<a name="USER_DeletionProtection"></a>

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

在使用 AWS 管理控制台 创建生产数据库集群时，将默认启用删除保护。但是，如果您使用 AWS CLI 或 API 创建集群，将默认禁用删除保护。启用或禁用删除保护不会导致中断。要能够删除集群，请修改集群并禁用删除保护。有关打开和关闭删除保护的更多信息，请参阅 [使用控制台、CLI 和 API 修改数据库集群](Aurora.Modifying.md#Aurora.Modifying.Cluster)。

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

## 删除已停止的 Aurora 集群
<a name="USER_Deletion_Stopped_Cluster"></a>

如果集群处于 `stopped` 状态，则无法将其删除。在这种情况下，请在删除集群之前启动集群。有关更多信息，请参阅“[启动 Aurora 数据库集群](aurora-cluster-stop-start.md#aurora-cluster-start)”。

## 删除作为只读副本的 Aurora MySQL 集群
<a name="USER_DeleteInstance.AuroraReplica"></a>

对于 Aurora MySQL，如果同时满足以下两个条件，则无法删除数据库集群中的数据库实例：
+ 该数据库集群是另一个 Aurora 数据库集群的只读副本。
+ 该数据库实例是该数据库集群的唯一实例。

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

## 删除集群时的最终快照
<a name="USER_Deletion_Final_Snapshot"></a>

在本节中，我们将给出示例以展示如何在删除 Aurora 集群时选择是否拍摄最终快照。如果选择拍摄最终快照，但指定的名称与现有快照的名称相同，则操作将停止并显示错误消息。在这种情况下，请检查快照详细信息，以确认它是否代表您当前的详细信息，还是代表较旧的快照。如果现有快照没有您想要保留的最新数据，请重命名快照并重试，或者为 **final snapshot** 参数指定其他名称。

## 从 Aurora 数据库集群中删除数据库实例
<a name="USER_DeleteInstance"></a>

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

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

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 删除数据库实例。

**注意**  
在删除 Aurora 副本时，将立即删除其实例终端节点，并将 Aurora 副本从读取器终端节点中删除。如果在正待删除的 Aurora 副本上运行语句，则有 3 分钟宽限期。现有语句可在此宽限期内完成。当此宽限期结束后，将关闭并删除 Aurora 副本。

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

**注意**  
当数据库集群启用了删除保护时，您无法删除该集群。有关更多信息，请参阅“[Aurora 集群的删除保护](#USER_DeletionProtection)”。  
您可以通过修改数据库集群来禁用删除保护。有关更多信息，请参阅 [修改 Amazon Aurora 数据库集群](Aurora.Modifying.md)。

### 控制台
<a name="USER_DeleteInstance.CON"></a>

**删除数据库集群中的数据库实例**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

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

1. 对于 ** Actions**，选择 **Delete**。

1. 在框中输入 **delete me**。

1. 选择 **Delete**。

### AWS CLI
<a name="USER_DeleteInstance.CLI"></a>

要使用 AWS CLI 删除数据库实例，请调用 [delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance.html) 命令并指定 `--db-instance-identifier` 值。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds delete-db-instance \
    --db-instance-identifier mydbinstance
```
对于：Windows  

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

### RDS API
<a name="USER_DeleteInstance.API"></a>

要使用 Amazon RDS API 删除数据库实例，请调用 [DeleteDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBInstance.html) 操作并指定 `DBInstanceIdentifier` 参数。

**注意**  
 当数据库实例的状态为 `deleting` 时，其 CA 证书值不会显示在 RDS 控制台中或 AWS CLI 命令或 RDS API 操作的输出中。有关 CA 证书的更多信息，请参阅 [使用 SSL/TLS 加密与数据库集群的连接](UsingWithRDS.SSL.md)。