

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon Keyspaces 中将表从备份还原到指定的时间点
<a name="restoretabletopointintime"></a>

下面一节演示了如何将现有 Amazon Keyspaces 表还原到指定的时间点。

**注意**  
此过程假设您正在使用的表已配置为 point-in-time恢复功能。要为表启用 PITR，请参阅[在 Amazon Keyspaces 中为表配置 PITR](configure_PITR.md)。

**重要**  
 在恢复过程中，请勿修改或删除授予 IAM 委托人（例如用户、群组或角色）执行恢复权限的 (IAM) 策略。 AWS Identity and Access Management 否则，可能会出现意外行为。例如，如果在还原表时删除表的写入权限，则底层 `RestoreTableToPointInTime` 操作将无法向表中写入任何还原的数据。  
您只能在还原操作完成之后修改或删除权限。

------
#### [ Console ]

**使用控制台将表还原到指定的时间点。**

1. [登录并在家中打开 Amazon Keyspaces 控制台。 AWS 管理控制台 https://console.aws.amazon.com/keyspaces/](https://console.aws.amazon.com/keyspaces/home)

1. 在控制台左侧的导航窗格中，选择**表**。

1. 在表列表中，选择要还原的表。

1. 在该表的 “**备份**” 选项卡上，在 “**Point-in-time 恢复**” 部分中，选择 “**恢复**”。

1. 对于新表名，为已还原的表输入一个新名称，例如 **mytable\$1restored**。

1. 要定义还原操作的时间点，可以在两个选项之间进行选择：
   + 选择预配置的**最早**时间。
   + 选择**指定日期和时间**并输入要将新表还原到的日期和时间。
**注意**  
您可以还原到**最早**时间和当前时间之间的任何时间点。Amazon Keyspaces 会根据所选日期和时间 (day:hour:minute:second) 将表数据还原到相应状态。

1. 选择**还原**，启动还原过程。

   正在还原的表显示状态为 **Restoring (正在还原)**。还原过程完成后，已还原表的状态更改为**活动**。

------
#### [ Cassandra Query Language (CQL) ]

**使用 CQL 将表还原到某个时间点**

1. 您可以将活动表恢复到介于当前时间 point-in-time`earliest_restorable_timestamp`之间。默认值为当前时间。

   要确认该表已启用 point-in-time恢复，请查询，`system_schema_mcs.tables`如本示例所示。

   ```
   SELECT custom_properties
   FROM system_schema_mcs.tables
   WHERE keyspace_name = 'mykeyspace' AND table_name = 'mytable';
   ```

   Point-in-time 恢复已启用，如以下示例输出所示。

   ```
   custom_properties
   -----------------
   {
     ...,
       "point_in_time_recovery": {
       "earliest_restorable_timestamp":"2020-06-30T19:19:21.175Z"
       "status":"enabled"
     }
   }
   ```

1. 
   + 将表还原到当前时间。如果省略 `WITH restore_timestamp = ...` 子句，系统将使用当前时间戳。

     ```
     RESTORE TABLE mykeyspace.mytable_restored
     FROM TABLE mykeyspace.mytable;
     ```
   + 也可以还原到以 ISO 8601 格式的 `restore_timestamp` 定义的特定时间点。您可以指定最近 35 天内的任何时间点。例如，以下命令使表还原到 `EarliestRestorableDateTime`。

     ```
     RESTORE TABLE mykeyspace.mytable_restored
     FROM TABLE mykeyspace.mytable
     WITH restore_timestamp = '2020-06-30T19:19:21.175Z';
     ```

     有关完整的语法描述，请参阅语言参考中的 [RESTORE TABLE](cql.ddl.table.md#cql.ddl.table.restore)。

1. 要验证表的还原是否成功，请查询 `system_schema_mcs.tables`，确认表的状态。

   ```
   SELECT status
   FROM system_schema_mcs.tables
   WHERE keyspace_name = 'mykeyspace' AND table_name = 'mytable_restored'
   ```

   该查询会显示以下输出。

   ```
   status
   ------
   RESTORING
   ```

   正在还原的表显示状态为 **Restoring (正在还原)**。还原过程完成后，表的状态更改为**活动**。

------
#### [ CLI ]

**使用将表还原到某个时间点 AWS CLI**

1. 创建一个名为 `myTable` 且启用了 PITR 的简单表。为了便于阅读，该命令已分成不同的行。

   ```
   aws keyspaces create-table --keyspace-name 'myKeyspace' --table-name 'myTable' 
               --schema-definition 'allColumns=[{name=id,type=int},{name=name,type=text},{name=date,type=timestamp}],partitionKeys=[{name=id}]' 
               --point-in-time-recovery 'status=ENABLED'
   ```

1. 确认新表的属性并查看 PITR 的 `earliestRestorableTimestamp`。

   ```
   aws keyspaces get-table --keyspace-name 'myKeyspace' --table-name 'myTable'
   ```

   该命令的输出返回了以下内容。

   ```
   {
       "keyspaceName": "myKeyspace",
       "tableName": "myTable",
       "resourceArn": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/myKeyspace/table/myTable",
       "creationTimestamp": "2022-06-20T14:34:57.049000-07:00",
       "status": "ACTIVE",
       "schemaDefinition": {
           "allColumns": [
               {
                   "name": "id",
                   "type": "int"
               },
               {
                   "name": "date",
                   "type": "timestamp"
               },
               {
                   "name": "name",
                   "type": "text"
               }
           ],
           "partitionKeys": [
               {
                   "name": "id"
               }
           ],
           "clusteringKeys": [],
           "staticColumns": []
       },
       "capacitySpecification": {
           "throughputMode": "PAY_PER_REQUEST",
           "lastUpdateToPayPerRequestTimestamp": "2022-06-20T14:34:57.049000-07:00"
       },
       "encryptionSpecification": {
           "type": "AWS_OWNED_KMS_KEY"
       },
       "pointInTimeRecovery": {
           "status": "ENABLED",
           "earliestRestorableTimestamp": "2022-06-20T14:35:13.693000-07:00"
       },
       "defaultTimeToLive": 0,
       "comment": {
           "message": ""
       }
   }
   ```

1. 
   + 要将表还原到某个时间点，请指定 ISO 8601 格式的 `restore_timestamp`。您可以选择最近 35 天中的任何时间点，时间间隔为 1 秒。例如，以下命令使表还原到 `EarliestRestorableDateTime`。

     ```
     aws keyspaces restore-table --source-keyspace-name 'myKeyspace' --source-table-name 'myTable' --target-keyspace-name 'myKeyspace' --target-table-name 'myTable_restored' --restore-timestamp "2022-06-20 21:35:14.693"
     ```

     此命令的输出会返回已还原的表的 ARN。

     ```
     {
         "restoredTableARN": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/myKeyspace/table/myTable_restored"
     }
     ```
   + 要将该表还原到当前时间，可以省略 `restore-timestamp` 参数。

     ```
     aws keyspaces restore-table --source-keyspace-name 'myKeyspace' --source-table-name 'myTable' --target-keyspace-name 'myKeyspace' --target-table-name 'myTable_restored1'"
     ```

------