

# 将 Amazon RDS 的数据库实例还原到指定时间
<a name="USER_PIT"></a>

可以将数据库实例还原到特定时间点，创建一个新的数据库实例而无需修改源数据库实例。

将数据库实例还原到某个时间点时，您可以选择默认的 Virtual Private Cloud (VPC) 安全组，也可以将自定义 VPC 安全组应用于数据库实例。

还原的数据库实例自动与默认数据库参数和选项组关联。但是，您可以通过在还原期间指定自定义参数组和选项组来应用它们。

如果请求中提供了标签，则所提供的标签将应用于还原的数据库实例。如果请求中未提供标签，并且源数据库实例在区域内处于活动状态并且具有标签，则 RDS 会将源数据库实例中的最新标签添加到还原的数据库实例。

RDS 每隔 5 分钟将数据库实例的事务日志上传到 Amazon S3。要查看某个数据库实例的最近可还原时间，请使用 AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令，并查看该数据库实例的 `LatestRestorableTime` 字段中返回的值。要在 Amazon RDS 控制台中查看每个数据库实例的最近可还原时间，请选择**自动备份**。

您可以还原至备份保留期内的任何时间点。要查看每个数据库实例的最早可还原时间，请在 Amazon RDS 控制台中选择**自动备份**。

![\[自动备份\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/automated-backups.png)


**注意**  
如果使用预置 IOPS 存储作为源数据库实例，我们建议您恢复到相同或相似的数据库实例大小和 IOPS。例如，如果您选择具有不兼容 IOPS 值的数据库实例大小，则可能会出现错误。

有关使用 RDS Extended Support 版本还原数据库实例的信息，请参阅[使用 Amazon RDS 扩展支持还原数据库实例或多可用区集群](extended-support-restoring-db-instance.md)。

从某个时间点进行还原时，某些 Amazon RDS 数据库引擎有一些特殊的注意事项：
+ 如果您对 Amazon RDS for Db2 数据库实例使用密码身份验证，则日志中不会捕获用户管理操作（包括 `rdsadmin.add_user`）。这些操作需要完整快照备份。

  使用 BYOL 模型时，您的 RDS for Db2 数据库实例必须与包含您的 IBM Site ID 和 IBM Customer ID 的自定义参数组相关联。否则，尝试将数据库实例还原到特定时间点将失败。Amazon RDS for Db2 数据库实例还必须与 AWS License Manager 自行管理许可证相关联。有关更多信息，请参阅 [Db2 的自带许可（BYOL）](db2-licensing.md#db2-licensing-options-byol)。

  采用“通过 AWS Marketplace 获得 Db2 许可证”模式时，您需要对要使用的特定 IBM Db2 版本进行有效 AWS Marketplace 订阅。如果您还没有订阅，请[在 AWS Marketplace 中为该 IBM Db2 版本订阅 Db2](db2-licensing.md#db2-marketplace-subscribing-registering)。有关更多信息，请参阅 [通过 AWS Marketplace 获得 Db2 许可证](db2-licensing.md#db2-licensing-options-marketplace)。
+ 将 RDS for Oracle 数据库实例还原到某个时间点时，可以为还原的数据库实例指定不同的数据库引擎、许可模式和 DBName（SID）。也可以指定 RDS 应在 AWS Secrets Manager 中存储和管理主用户密码。有关更多信息，请参阅 [使用 AWS Secrets Manager 管理主用户密码的概述](rds-secrets-manager.md#rds-secrets-manager-overview)。
+ 将 Microsoft SQL Server 数据库实例还原到某个时间点时，该实例中的每个数据库均还原到与实例中每个其他数据库相差 1 秒以内的时间点。对于实例内跨多个数据库的事务，还原时可能会发生不一致的情况。
+ 对于 SQL Server 数据库实例，`OFFLINE`、`EMERGENCY` 和 `SINGLE_USER` 模式不受支持。将任何数据库设置成上述模式之一，会导致整个实例的最近可还原时间停滞不前。
+ 某些操作 (如更改 SQL Server 数据库的恢复模式) 可中断用于时间点恢复的日志序列。在某些情况下，Amazon RDS 可以检测到此问题，最近的可恢复时间将无法向前推进。在其他情况下，例如在 SQL Server 数据库使用 `BULK_LOGGED` 恢复模型时，无法检测到日志序列中断。如果日志序列中断，则可能无法将 SQL Server 数据库实例还原到某个时间点。出于这些原因，Amazon RDS 不支持更改 SQL Server 数据库的恢复模式。

您也可以使用 AWS Backup 管理 Amazon RDS 数据库实例的备份。如果您的数据库实例与 AWS Backup 中的备份计划关联，则该备份计划用于时间点恢复。使用 AWS Backup 创建的备份的名称以 `awsbackup:AWS-Backup-job-number` 结尾。有关 AWS Backup 的更多信息，请参阅 [https://docs.aws.amazon.com/aws-backup/latest/devguide](https://docs.aws.amazon.com/aws-backup/latest/devguide)。

**注意**  
本主题中的信息适用于 Amazon RDS。有关还原 Amazon Aurora 数据库集群的更多信息，请参阅[将数据库集群还原到指定时间](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-pitr.html)。

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 将数据库实例还原到某个时间点。

**注意**  
还原数据库实例时，无法减少存储量。当您增加分配的存储空间时，必须至少增加 10%。如果您尝试将该值增加不到 10％，则会得到错误。您无法在还原 RDS for SQL Server 数据库实例时增加分配的存储。

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

**将数据库实例还原至指定时间**

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

1. 在导航窗格中，选择 **Automated backups (自动备份)**。

   自动备份便会显示在 **Current Region**（当前区域）选项卡上。

1. 选择要还原的数据库实例。

1. 对于 **Actions (操作)**，选择 **Restore to point in time (还原到时间点)**。

   此时会显示**还原到时间点**窗口。

1. 选择**最近可还原时间**以还原到可能的最近时间，或选择**自定义**来选择时间。

   如果您选择 **Custom**（自定义），请输入要将实例集群还原到的日期和时间。
**注意**  
时间以您的本地时区显示，表示为协调世界时 (UTC) 的偏移量。例如，UTC-5 是东部标准时间/中部夏令时。

1. 对于**数据库实例标识符**，请输入目标还原后的数据库实例的名称。名称必须唯一。

1. 根据需要选择其他选项，例如数据库实例类、存储，以及是否要使用存储自动扩展。

   有关每项设置的信息，请参阅 [数据库实例的设置](USER_CreateDBInstance.Settings.md)。

1. 选择**还原到时间点**。

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

要将数据库实例还原到指定的时间，请使用 AWS CLI 命令 [restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) 创建新的数据库实例。此示例还设置了分配的存储大小并启用存储自动扩缩。

此操作支持资源标记。使用 `--tags` 选项时，将忽略源数据库实例标签，并使用提供的标签。否则，将使用源实例的最新标签。

您可以指定其他设置。有关每项设置的信息，请参阅 [数据库实例的设置](USER_CreateDBInstance.Settings.md)。

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

```
1. aws rds restore-db-instance-to-point-in-time \
2.     --source-db-instance-identifier mysourcedbinstance \
3.     --target-db-instance-identifier mytargetdbinstance \
4.     --restore-time 2017-10-14T23:45:00.000Z \
5.     --allocated-storage 100 \
6.     --max-allocated-storage 1000
```
对于：Windows  

```
1. aws rds restore-db-instance-to-point-in-time ^
2.     --source-db-instance-identifier mysourcedbinstance ^
3.     --target-db-instance-identifier mytargetdbinstance ^
4.     --restore-time 2017-10-14T23:45:00.000Z ^
5.     --allocated-storage 100 ^
6.     --max-allocated-storage 1000
```

**Example**  
以下示例展示了将实例还原到某个时间点时添加卷的情况。  
对于 Linux、macOS 或 Unix：  

```
 1. aws rds restore-db-instance-to-point-in-time \
 2.      --source-db-instance-identifier my-asv-instance \
 3.      --target-db-instance-identifier my-pitr-instance \
 4.      --use-latest-restorable-time \
 5.      --additional-storage-volumes '[{ \
 6.              "VolumeName": "rdsdbdata2", \
 7.              "StorageType":"gp3", \
 8.              "AllocatedStorage": 5000, \
 9.              "IOPS": 12000 \
10.          }]'
```
对于：Windows  

```
 1. aws rds restore-db-instance-to-point-in-time ^
 2.      --source-db-instance-identifier my-asv-instance ^
 3.      --target-db-instance-identifier my-pitr-instance ^
 4.      --use-latest-restorable-time ^
 5.      --additional-storage-volumes '[{ ^
 6.              "VolumeName": "rdsdbdata2", ^
 7.              "StorageType":"gp3", ^
 8.              "AllocatedStorage": 5000, ^
 9.              "IOPS": 12000 ^
10.          }]'
```

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

要将数据库实例还原到指定时间，请结合以下参数调用 Amazon RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) 操作：
+ `SourceDBInstanceIdentifier`
+ `TargetDBInstanceIdentifier`
+ `RestoreTime`