

# 将 Amazon RDS 的数据库快照数据导出到 Amazon S3
<a name="USER_ExportSnapshot"></a>

您可以将数据库快照数据导出到 Amazon S3 存储桶。导出过程在后台运行，而不会影响活动数据库的性能。

导出数据库快照时，Amazon RDS 从快照中提取数据并将其存储在 Amazon S3 存储桶中。数据以压缩和一致的 Apache Parquet 格式存储。

您可以导出所有类型的数据库快照 – 包括手动快照、自动系统快照和 AWS Backup 服务创建的快照。默认情况下，将导出快照中的所有数据。但是，您可以选择导出特定的一组数据库、方案或表。

导出数据后，您可以通过 Amazon Athena 或 Amazon Redshift Spectrum 等工具直接分析导出的数据。有关使用 Athena 读取 Parque 数据的更多信息，请参阅 *Amazon Athena 用户指南*中的 [Parquet SerDe](https://docs.aws.amazon.com/athena/latest/ug/parquet-serde.html)。有关使用 Redshift Spectrum 读取 Parquet 数据的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》中的[从列式数据格式执行 COPY 操作](https://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-copy-from-columnar.html)。

**警告**  
您无法将从 S3 导出的快照数据还原到新的数据库实例，也无法将快照数据从 S3 导入到现有的数据库实例。但是，您可以使用 Amazon Athena 或 Redshift Spectrum 处理数据来进行分析。此外，您可以使用 AWS Glue 转换数据，然后使用诸如 AWS DMS 之类的工具或自定义脚本将其导入 Amazon RDS。

有关将数据库快照导出到 Amazon S3 的更多信息，请参阅以下主题。

**主题**
+ [监控 Amazon RDS 的快照导出](USER_ExportSnapshot.Monitoring.md)
+ [取消 Amazon RDS 的快照导出任务](USER_ExportSnapshot.Canceling.md)
+ [Amazon RDS 的 Amazon S3 导出任务的失败消息](USER_ExportSnapshot.failure-msg.md)
+ [排查 RDS for PostgreSQL 权限错误](USER_ExportSnapshot.postgres-permissions.md)
+ [Amazon RDS 导出到 Amazon S3 时的文件命名约定](USER_ExportSnapshot.FileNames.md)
+ [Amazon RDS 导出到 Amazon S3 存储桶时的数据转换](USER_ExportSnapshot.data-types.md)

## 导出快照数据概述
<a name="USER_ExportSnapshot.Overview"></a>

您可以使用以下过程将数据库快照数据导出到 Amazon S3 存储桶。有关更多详细信息，请参阅以下部分。

1. 确定要导出的快照。

   使用现有的自动快照或手动快照，或创建数据库实例或多可用区数据库集群的手动快照。

1. 设置对 Amazon S3 存储桶的访问权限。

   *存储桶*是 Amazon S3 对象或文件的容器。要提供访问存储桶的信息，请执行以下步骤：

   1. 标识要将快照导出到的 S3 存储桶。S3 存储桶必须与快照位于同一 AWS 区域。有关更多信息，请参阅 [标识要导出到的 Amazon S3 存储桶](#USER_ExportSnapshot.SetupBucket)。

   1. 创建一个 AWS Identity and Access Management (IAM) 角色，用于授予快照导出任务对 S3 存储桶的访问权限。有关更多信息，请参阅 [使用 IAM 角色提供对 Amazon S3 存储桶的访问权限](#USER_ExportSnapshot.SetupIAMRole)。

1. 创建对称加密 AWS KMS key 以进行服务器端加密。快照导出任务使用 KMS 密钥在将导出数据写入 S3 时设置 AWS KMS 服务器端加密。

   KMS 密钥策略必须同时包含 `kms:CreateGrant` 和 `kms:DescribeKey` 权限。有关在 Amazon RDS 中使用 KMS 密钥的更多信息，请参阅[AWS KMS key 管理](Overview.Encryption.Keys.md)。

   如果 KMS 密钥策略中有拒绝语句，则确保显式排除 AWS 服务主体 `export.rds.amazonaws.com`。

   您可以在您的 AWS 账户内使用 KMS 密钥，或者您可以使用跨账户 KMS 密钥。有关更多信息，请参阅 [使用跨账户 AWS KMS key 加密 Amazon S3 导出的内容](#USER_ExportSnapshot.CMK)。

1. 使用控制台或 `start-export-task` CLI 命令将快照导出到 Amazon S3。有关更多信息，请参阅 [将数据库快照导出到 Amazon S3 桶](#USER_ExportSnapshot.Exporting)。

1. 要访问 Amazon S3 存储桶中导出的数据，请参阅 *Amazon Simple Storage Service 用户指南*中的[上传、下载和管理对象](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-download-objects.html)。

## 设置 Amazon S3 存储桶的访问权限
<a name="USER_ExportSnapshot.Setup"></a>

要将数据库快照数据导出到 Amazon S3 文件，首先需要授予快照访问 Amazon S3 存储桶的权限。然后，您创建 IAM 角色以允许 Amazon RDS 服务写入 Amazon S3 存储桶。

**Topics**
+ [标识要导出到的 Amazon S3 存储桶](#USER_ExportSnapshot.SetupBucket)
+ [使用 IAM 角色提供对 Amazon S3 存储桶的访问权限](#USER_ExportSnapshot.SetupIAMRole)
+ [使用跨账户 Amazon S3 存储桶](#USER_ExportSnapshot.Setup.XAcctBucket)
+ [使用跨账户 AWS KMS key 加密 Amazon S3 导出的内容](#USER_ExportSnapshot.CMK)

### 标识要导出到的 Amazon S3 存储桶
<a name="USER_ExportSnapshot.SetupBucket"></a>

标识要将数据库快照导出到的 Amazon S3 存储桶。使用现有 S3 存储桶或创建新的 S3 存储桶。

**注意**  
要导出到的 S3 存储桶必须与快照位于同一 AWS 区域中。

有关使用 Amazon S3 存储桶的详细信息，请参阅 *Amazon Simple Storage Service 用户指南*中的以下主题：
+ [如何查看 S3 存储桶的属性？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/view-bucket-properties.html)
+ [如何为 Amazon S3 存储桶启用默认加密？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/default-bucket-encryption.html)
+ [如何创建 S3 存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)

### 使用 IAM 角色提供对 Amazon S3 存储桶的访问权限
<a name="USER_ExportSnapshot.SetupIAMRole"></a>

将数据库快照数据导出到 Amazon S3 之前，请授予快照导出任务对 Amazon S3 存储桶的写入访问权限。

要授予此权限，请创建 IAM 策略以提供对桶的访问权限，然后创建一个 IAM 角色并将该策略附加到该角色。您稍后将此 IAM 角色分配给快照导出任务。

有关其他 Amazon S3 访问管理工具的信息，请参阅《Amazon S3 用户指南》**中的 [Amazon S3 中的访问控制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-management.html)。

**重要**  
如果计划使用AWS 管理控制台导出快照，则可以选择在导出快照时自动创建 IAM 策略和角色。有关说明，请参阅 [将数据库快照导出到 Amazon S3 桶](#USER_ExportSnapshot.Exporting)。

**授予数据库快照任务访问 Amazon S3 的权限**

1. 创建一个 IAM 策略。此策略提供允许快照导出任务访问 Amazon S3 的存储桶和对象权限。

   在策略中包含以下必需操作，以允许将文件从 Amazon RDS 桶传输到 S3 桶：
   + `s3:PutObject*`
   + `s3:GetObject*` 
   + `s3:ListBucket` 
   + `s3:DeleteObject*`
   +  `s3:GetBucketLocation`

   在策略中，包含以下资源以标识 S3 桶以及该桶中的对象。以下资源列表显示用于访问 Amazon S3 的 Amazon Resource Name (ARN) 格式。
   + `arn:aws:s3:::amzn-s3-demo-bucket`
   + `arn:aws:s3:::amzn-s3-demo-bucket/*`

   有关为 Amazon RDS 创建 IAM 策略的更多信息，请参阅[创建和使用适用于 IAM 数据库访问的 IAM 策略](UsingWithRDS.IAMDBAuth.IAMPolicy.md)。另请参阅 *IAM 用户指南*中的[教程：创建和附加您的第一个客户托管策略](https://docs.aws.amazon.com//IAM/latest/UserGuide/tutorial_managed-policies.html)。

   以下 AWS CLI 命令使用这些选项创建一个名为 `ExportPolicy` 的 IAM 策略。该策略授予对名为 *amzn-s3-demo-bucket* 的存储桶的访问权限。
**注意**  
创建策略后，请记下策略的 ARN。在将策略附加到 IAM 角色时，您在后面的步骤中需要使用 ARN。

   ```
   aws iam create-policy  --policy-name ExportPolicy --policy-document '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ExportPolicy",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject*",
                   "s3:ListBucket",
                   "s3:GetObject*",
                   "s3:DeleteObject*",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket",
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           }
       ]
   }'
   ```

1. 创建一个 IAM 角色，以便 Amazon RDS 可以代入该 IAM 角色，代表您访问 Amazon S3 桶。有关更多信息，请参阅 *IAM 用户指南*中的[创建向 IAM 用户委派权限的角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)。

   以下示例说明了如何使用 AWS CLI 命令创建一个名为 `rds-s3-export-role` 的角色。

   ```
   aws iam create-role  --role-name rds-s3-export-role  --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "export.rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole"
          }
        ] 
      }'
   ```

1. 将您创建的 IAM 策略附加到您创建的 IAM 角色。

   以下 AWS CLI 命令将之前创建的策略附加到名为 `rds-s3-export-role` 的角色。将 `your-policy-arn` 替换为您在先前步骤中记下的策略 ARN。

   ```
   aws iam attach-role-policy  --policy-arn your-policy-arn  --role-name rds-s3-export-role
   ```

### 使用跨账户 Amazon S3 存储桶
<a name="USER_ExportSnapshot.Setup.XAcctBucket"></a>

您可以跨 AWS 账户使用 Amazon S3 存储桶。要使用跨账户存储桶，请添加存储桶策略以允许访问您用于 S3 导出的 IAM 角色。有关更多信息，请参阅[示例 2：存储桶拥有者授予跨账户存储桶权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)。

将存储桶策略附加到存储桶，如下面的示例所示。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/Admin"
            },
            "Action": [
                "s3:PutObject*",
                "s3:ListBucket",
                "s3:GetObject*",
                "s3:DeleteObject*",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-destination-bucket",
                "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
            ]
        }
    ]
}
```

------

### 使用跨账户 AWS KMS key 加密 Amazon S3 导出的内容
<a name="USER_ExportSnapshot.CMK"></a>

您可以使用跨账户 AWS KMS key 以加密 Amazon S3 导出的内容。首先，向本地账户添加密钥策略，然后在外部账户中添加 IAM 策略。有关更多信息，请参阅[允许其他账户中的用户使用 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

**要使用跨账户 KMS 密钥**

1. 向本地账户添加密钥策略。

   以下示例为外部账户 444455556666 中的 `ExampleRole` 和 `ExampleUser` 提供了内部账户 123456789012 中的权限。

   ```
   {
       "Sid": "Allow an external account to use this KMS key",
       "Effect": "Allow",
       "Principal": {
           "AWS": [
               "arn:aws:iam::444455556666:role/ExampleRole",
               "arn:aws:iam::444455556666:user/ExampleUser"
           ]
       },
       "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:CreateGrant",
           "kms:DescribeKey",
           "kms:RetireGrant"
       ],
       "Resource": "*"
   }
   ```

1. 在外部账户中添加 IAM 策略。

   以下示例 IAM 策略允许主体使用账户 123456789012 中的 KMS 密钥执行加密操作。要向账户 444455556666 中的 `ExampleRole` 和 `ExampleUser` 授予此权限，[请将策略附加](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)到该账户中的用户或角色。

   ```
   {
       "Sid": "Allow use of KMS key in account 123456789012",
       "Effect": "Allow",
       "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:CreateGrant",
           "kms:DescribeKey",
           "kms:RetireGrant"
       ],
       "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
   }
   ```

## 将数据库快照导出到 Amazon S3 桶
<a name="USER_ExportSnapshot.Exporting"></a>

每个 AWS 账户 最多可以执行五个并发数据库快照导出任务。

**注意**  
导出 RDS 快照可能需要一段时间，具体取决于您的数据库类型和大小。导出任务首先还原并扩展整个数据库，然后再将数据提取到 Amazon S3。此阶段的任务进度显示为**正在启动**。当任务切换到将数据导出到 S3 时，进度显示为**正在进行**。  
完成导出所需的时间取决于数据库中存储的数据。例如，具有分布良好的数字主键或索引列的表导出速度最快。不包含适用于分区的列的表，以及只有基于字符串的列上的一个索引的表将需要更长时间。导出时间之所以更长，是因为导出使用较慢的单线程进程。

您可以使用AWS 管理控制台、AWS CLI 或 RDS API 将数据库快照导出到 Amazon S3。要将数据库快照导出到跨账户 Amazon S3 存储桶，请使用 AWS CLI 或 RDS API。

如果您使用 Lambda 函数导出快照，请将 `kms:DescribeKey` 操作添加到 Lambda 函数策略中。有关更多信息，请参阅 [AWS Lambda 权限](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html)。

### 控制台
<a name="USER_ExportSnapshot.ExportConsole"></a>

仅为可导出到 Amazon S3 的快照显示**导出到 Amazon S3** 控制台选项。由于以下原因，快照可能无法导出：
+ 此数据库引擎不支持 S3 导出。
+ 此数据库引擎版本不支持 S3 导出。
+ 创建了快照的 AWS 区域不支持 S3 导出。

**导出数据库快照**

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

1. 在导航窗格中，选择**快照**。

1. 从选项卡中，选择要导出的快照类型。

1. 在快照列表中，选择要导出的快照。

1. 对于 **Actions (操作)**，选择 **Export to Amazon S3 (导出到 Amazon S3)**。

   此时将显示 **Export to Amazon S3 (导出到 Amazon S3)** 窗口。

1. 对于 **Export identifier (导出标识符)**，输入用于标识导出任务的名称。此值也用于在 S3 存储桶中创建的文件的名称。

1. 选择要导出的数据：
   + 选择 **All (全部)** 可导出快照中的所有数据。
   + 选择 **Partial (部分)** 可导出快照的特定部分。如需标识要导出快照的哪些部分，请为 **Identifiers (标识符)**（以空格分隔）输入一个或多个数据库、架构或表。

     使用以下格式：

     ```
     database[.schema][.table] database2[.schema2][.table2] ... databasen[.scheman][.tablen]
     ```

     例如：

     ```
     mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
     ```

1. 对于 **S3 bucket (S3 存储桶)**，选择要导出到的存储桶。

   要将导出的数据分配给 S3 存储桶中的文件夹路径，请为 **S3 prefix (S3 前缀)** 输入可选路径。

1. 对于 **IAM role (IAM 角色)**，请选择一个角色以授予您对所选 S3 存储桶的写入访问权限，或创建新角色。
   + 如果您按照 [使用 IAM 角色提供对 Amazon S3 存储桶的访问权限](#USER_ExportSnapshot.SetupIAMRole)中的步骤创建了角色，请选择该角色。
   + 如果您没有创建授予您对所选 S3 桶的写入访问权限的角色，则选择 **Create a new role**（创建新角色）来自动创建该角色。接下来，在 **IAM role name (IAM 角色名称)** 中输入角色的名称。

1. 对于 **AWS KMS key**，输入要用于加密导出数据的密钥的 ARN。

1. 选择 **Export to Amazon S3 (导出到 Amazon S3)**。

### AWS CLI
<a name="USER_ExportSnapshot.ExportCLI"></a>

要使用 AWS CLI 将数据库快照导出到 Amazon S3，请使用包含以下所需选项的 [start-export-task](https://docs.aws.amazon.com/cli/latest/reference/rds/start-export-task.html) 命令：
+ `--export-task-identifier` 
+ `--source-arn` 
+ `--s3-bucket-name` 
+ `--iam-role-arn` 
+ `--kms-key-id` 

在以下示例中，快照导出任务名为 *my-snapshot-export*，该任务将快照导出到名为 *amzn-s3-demo-bucket* 的 S3 存储桶。

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

```
1. aws rds start-export-task \
2.     --export-task-identifier my-snapshot-export \
3.     --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name \
4.     --s3-bucket-name amzn-s3-demo-bucket \
5.     --iam-role-arn iam-role \
6.     --kms-key-id my-key
```
对于：Windows  

```
1. aws rds start-export-task ^
2.     --export-task-identifier my-snapshot-export ^
3.     --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name ^
4.     --s3-bucket-name amzn-s3-demo-bucket ^
5.     --iam-role-arn iam-role ^
6.     --kms-key-id my-key
```
示例输出如下。  

```
{
    "Status": "STARTING", 
    "IamRoleArn": "iam-role", 
    "ExportTime": "2019-08-12T01:23:53.109Z", 
    "S3Bucket": "my-export-bucket", 
    "PercentProgress": 0, 
    "KmsKeyId": "my-key", 
    "ExportTaskIdentifier": "my-snapshot-export", 
    "TotalExtractedDataInGB": 0, 
    "TaskStartTime": "2019-11-13T19:46:00.173Z", 
    "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name"
}
```
要在 S3 存储桶中为快照导出提供文件夹路径，请在 [start-export-task](https://docs.aws.amazon.com/cli/latest/reference/rds/start-export-task.html) 命令中包含 `--s3-prefix` 选项。

### RDS API
<a name="USER_ExportSnapshot.ExportAPI"></a>

要使用 Amazon RDS API 将数据库快照导出到 Amazon S3，请使用包含以下所需参数的 [StartExportTask](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StartExportTask.html) 操作：
+ `ExportTaskIdentifier`
+ `SourceArn`
+ `S3BucketName`
+ `IamRoleArn`
+ `KmsKeyId`

## 区域和版本可用性
<a name="USER_ExportSnapshot.RegionVersionAvailability"></a>

功能可用性和支持因每个数据库引擎的特定版本以及 AWS 区域而异。有关将快照导出到 S3 的版本和区域可用性的更多信息，请参阅[支持在 Amazon RDS 中将快照导出到 S3 的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.ExportSnapshotToS3.md)。

## 限制
<a name="USER_ExportSnapshot.Limits"></a>

将数据库快照数据导出到 Amazon S3 有以下限制：
+ 您不能同时为同一个数据库快照运行多个导出任务。这同时适用于完全导出和部分导出。
+ 不支持从使用磁性存储的数据库导出快照。
+ 导出到 S3 不支持包含冒号（:）的 S3 前缀。
+ 在导出过程中，S3 文件路径中的以下字符将转换为下划线 (\$1)：

  ```
  \ ` " (space)
  ```
+ 如果数据库、架构或表的名称中包含以下字符以外的字符，则不支持部分导出。但是，您可以导出整个数据库快照。
  + 拉丁字母 (A–Z)
  + 数字 (0–9)
  + 美元符号 (\$1)
  + 下划线 (\$1)
+ 数据库表列名不支持空格 ( ) 和某些字符。在导出过程中会跳过列名中包含以下字符的表：

  ```
  , ; { } ( ) \n \t = (space)
  ```
+ 在导出过程中会跳过其名称中包含斜杠 (/) 的表。
+ 在导出期间，将跳过 RDS for PostgreSQL 临时表和未记录的表。
+ 如果数据包含接近或大于 500MB 的大型对象（例如 BLOB 或 CLOB），则导出失败。
+ 如果表中某个大行的大小接近或大于 2GB，则会在导出过程中略过该表。
+ 对于部分导出，`ExportOnly` 列表的最大大小为 200 KB。
+ 强烈建议您为每个导出任务使用唯一的名称。如果您没有使用唯一的任务名称，可能会收到以下错误消息：

  ExportTaskAlreadyExistsFault：调用 StartExportTask 操作时发生错误 (ExportTaskAlreadyExists)：ID 为 *xxxxx* 的导出任务已存在。
+ 您可以在将快照数据导出到 S3 时删除快照，但是在导出任务完成之前，仍需支付该快照的存储成本。
+ 您无法将从 S3 导出的快照数据还原到新的数据库实例，也无法将快照数据从 S3 导入到现有的数据库实例。
+ 每个 AWS 账户 最多可以执行五个并发数据库快照导出任务。
+ 要将数据库快照导出到跨账户 Amazon S3 存储桶，必须使用 AWS CLI 或 RDS API。
+ 在 Amazon RDS 完成导出任务后，您可能需要稍等片刻才能从同一个数据库快照开始另一个导出任务。
+ 您无法导出视图或实体化视图。
+ RDS 导出到 S3 对于 GuardDuty Malware Protection for S3 不支持基于标签的访问控制。

# 监控 Amazon RDS 的快照导出
<a name="USER_ExportSnapshot.Monitoring"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 监控数据库快照导出。

## 控制台
<a name="USER_ExportSnapshot.MonitorConsole"></a>

**监视数据库快照导出**

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

1. 在导航窗格中，选择**快照**。

1. 要查看快照导出的列表，请选择 **Amazon S3 中的导出**选项卡。

1. 要查看有关特定快照导出的信息，请选择导出任务。

## AWS CLI
<a name="USER_ExportSnapshot.MonitorCLI"></a>

要使用 AWS CLI 监控数据库快照导出，请使用 [describe-export-tasks](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-export-tasks.html) 命令。

以下示例说明如何显示有关所有快照导出的当前信息。

**Example**  

```
 1. aws rds describe-export-tasks
 2. 
 3. {
 4.     "ExportTasks": [
 5.         {
 6.             "Status": "CANCELED",
 7.             "TaskEndTime": "2019-11-01T17:36:46.961Z",
 8.             "S3Prefix": "something",
 9.             "ExportTime": "2019-10-24T20:23:48.364Z",
10.             "S3Bucket": "amzn-s3-demo-bucket",
11.             "PercentProgress": 0,
12.             "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY",
13.             "ExportTaskIdentifier": "anewtest",
14.             "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3",
15.             "TotalExtractedDataInGB": 0,
16.             "TaskStartTime": "2019-10-25T19:10:58.885Z",
17.             "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:parameter-groups-test"
18.         },
19. {
20.             "Status": "COMPLETE",
21.             "TaskEndTime": "2019-10-31T21:37:28.312Z",
22.             "WarningMessage": "{\"skippedTables\":[],\"skippedObjectives\":[],\"general\":[{\"reason\":\"FAILED_TO_EXTRACT_TABLES_LIST_FOR_DATABASE\"}]}",
23.             "S3Prefix": "",
24.             "ExportTime": "2019-10-31T06:44:53.452Z",
25.             "S3Bucket": "amzn-s3-demo-bucket1",
26.             "PercentProgress": 100,
27.             "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
28.             "ExportTaskIdentifier": "thursday-events-test", 
29.             "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3",
30.             "TotalExtractedDataInGB": 263,
31.             "TaskStartTime": "2019-10-31T20:58:06.998Z",
32.             "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-31-06-44"
33.         },
34.         {
35.             "Status": "FAILED",
36.             "TaskEndTime": "2019-10-31T02:12:36.409Z",
37.             "FailureCause": "The S3 bucket edgcuc-export isn't located in the current AWS Region. Please, review your S3 bucket name and retry the export.",
38.             "S3Prefix": "",
39.             "ExportTime": "2019-10-30T06:45:04.526Z",
40.             "S3Bucket": "amzn-s3-demo-bucket2",
41.             "PercentProgress": 0,
42.             "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
43.             "ExportTaskIdentifier": "wednesday-afternoon-test",
44.             "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3",
45.             "TotalExtractedDataInGB": 0,
46.             "TaskStartTime": "2019-10-30T22:43:40.034Z",
47.             "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-30-06-45"
48.         }
49.     ]
50. }
```
要显示有关特定快照导出的信息，请在 `--export-task-identifier` 命令中包含 `describe-export-tasks` 选项。要筛选输出，请包括 `--Filters` 选项。有关更多选项，请参阅 [describe-export-tasks](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-export-tasks.html) 命令。

## RDS API
<a name="USER_ExportSnapshot.MonitorAPI"></a>

要使用 Amazon RDS API 显示有关数据库快照导出的信息，请使用 [DescribeExportTasks](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeExportTasks.html) 操作。

要跟踪导出工作流的完成情况或启动其他工作流，您可以订阅 Amazon Simple Notification Service 主题。有关 Amazon SNS 的更多信息，请参阅 [使用 Amazon RDS 事件通知](USER_Events.md)。

# 取消 Amazon RDS 的快照导出任务
<a name="USER_ExportSnapshot.Canceling"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 取消数据库快照导出任务。

**注意**  
取消快照导出任务不会删除导出到 Amazon S3 的任何数据。有关如何使用控制台删除数据的信息，请参阅[如何从 S3 存储桶删除对象？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/delete-objects.html) 要使用 CLI 删除数据，请使用 [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) 命令。

## 控制台
<a name="USER_ExportSnapshot.CancelConsole"></a>

**取消快照导出任务**

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

1. 在导航窗格中，选择**快照**。

1. 选择 **Exports in Amazon S3 (Amazon S3 中的导出)** 选项卡。

1. 选择要取消的快照导出任务。

1. 选择 **Cancel (取消)**。

1. 在确认页面上选择 **Cancel export task (取消导出任务)**。

 

## AWS CLI
<a name="USER_ExportSnapshot.CancelCLI"></a>

要使用 AWS CLI 取消快照导出任务，请使用 [cancel-export-task](https://docs.aws.amazon.com/cli/latest/reference/rds/cancel-export-task.html) 命令。该命令需要 `--export-task-identifier` 选项。

**Example**  

```
 1. aws rds cancel-export-task --export-task-identifier my_export
 2. {
 3.     "Status": "CANCELING", 
 4.     "S3Prefix": "", 
 5.     "ExportTime": "2019-08-12T01:23:53.109Z", 
 6.     "S3Bucket": "amzn-s3-demo-bucket", 
 7.     "PercentProgress": 0, 
 8.     "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY", 
 9.     "ExportTaskIdentifier": "my_export", 
10.     "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", 
11.     "TotalExtractedDataInGB": 0, 
12.     "TaskStartTime": "2019-11-13T19:46:00.173Z", 
13.     "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:export-example-1"
14. }
```

## RDS API
<a name="USER_ExportSnapshot.CancelAPI"></a>

要使用 Amazon RDS API 取消快照导出任务，请使用带 `ExportTaskIdentifier` 参数的 [CancelExportTask](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CancelExportTask.html) 操作。

# Amazon RDS 的 Amazon S3 导出任务的失败消息
<a name="USER_ExportSnapshot.failure-msg"></a>

下表描述了 Amazon S3 导出任务失败时返回的消息。


| 失败消息 | 描述 | 
| --- | --- | 
| 出现未知的内部错误。 |  由于未知错误、异常或故障导致任务失败。  | 
| 将导出任务的元数据写入 S3 存储桶 [存储桶名称] 时出现未知的内部错误。 |  由于未知错误、异常或故障导致任务失败。  | 
| RDS 导出无法编写导出任务的元数据，因为它无法担任 IAM 角色 [角色 ARN]。 |  导出任务将担任您的 IAM 角色来验证是否允许向 S3 存储桶写入元数据。如果任务无法担任您的 IAM 角色，它将失败。  | 
| RDS 导出未能使用带有 KMS 密钥 [密钥 ID] 的 IAM 角色 [角色 ARN] 将导出任务的元数据写入 S3 存储桶 [存储桶名称]。错误代码：[错误代码] |  缺少一个或多个权限，因此导出任务无法访问 S3 存储桶。收到以下错误代码之一时，会引发此失败消息： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.failure-msg.html) 这些错误代码表示 IAM 角色、S3 桶或 KMS 密钥的设置出现配置错误。  | 
| IAM 角色 [角色 ARN] 无权在 S3 存储桶 [存储桶名称] 上调用 [S3 操作]。查看您的权限并重试导出。 |  IAM 策略配置错误。缺少对 S3 桶执行特定 S3 操作的权限，这会导致导出任务失败。  | 
| KMS 密钥检查失败。检查 KMS 密钥上的凭证然后重试。 | KMS 密钥凭证检查失败。 | 
| S3 凭证检查失败。检查 S3 存储桶和 IAM 策略的权限。 | S3 凭证检查失败。 | 
| S3 存储桶 [存储桶名称] 无效。它不在当前 AWS 区域，或者它不存在。检查 S3 存储桶名称，然后重试导出。 | S3 存储桶无效。 | 
| S3 存储桶 [存储桶名称] 不在当前 AWS 区域。检查 S3 存储桶名称，然后重试导出。 | S3 存储桶处于错误的 AWS 区域。 | 

# 排查 RDS for PostgreSQL 权限错误
<a name="USER_ExportSnapshot.postgres-permissions"></a>

将 PostgreSQL 数据库导出到 Amazon S3 时，您可能会看到 `PERMISSIONS_DO_NOT_EXIST` 错误，指出已跳过某些表。当您在创建数据库时指定的超级用户无权访问这些表时，通常会发生此错误。

要修复此错误，请运行以下命令：

```
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO superuser_name
```

有关超级用户权限的更多信息，请参阅 [主用户账户权限](UsingWithRDS.MasterAccounts.md)。

# Amazon RDS 导出到 Amazon S3 时的文件命名约定
<a name="USER_ExportSnapshot.FileNames"></a>

特定表的导出数据以 `base_prefix/files` 格式存储，基本前缀如下：

```
export_identifier/database_name/schema_name.table_name/
```

例如：

```
export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/
```

文件的命名方式有两种约定。
+ 当前约定：

  ```
  batch_index/part-partition_index-random_uuid.format-based_extension
  ```

  批量索引是一个序列号，表示从表中读取的一批数据。如果我们无法将您的表分区成小块以并行导出，则会有多个批量索引。如果表分区成多个表，也会发生同样的情况。这会出现多个批量索引，主表的每个表分区对应一个。

  如果我们可以将表分区成小块以并行读取，那么就只有批量索引 `1` 文件夹。

  在批量索引文件夹中，有一个或多个包含表数据的 Parquet 文件。Parquet 文件名的前缀是 `part-partition_index`。如果您的表已分区，则会有多个以分区索引 `00000` 开头的文件。

  分区索引序列中可能存在间隙。之所以发生这种情况，是因为每个分区都是从表中的范围查询中获得的。如果该分区的范围内没有数据，则跳过该序列号。

  例如，假设 `id` 列是表的主键，其最小值和最大值为 `100` 和 `1000`。当我们尝试导出这个带有九个分区的表时，我们会使用并行查询读取它，如下所示：

  ```
  SELECT * FROM table WHERE id <= 100 AND id < 200
  SELECT * FROM table WHERE id <= 200 AND id < 300
  ```

  这应该生成九个文件，从 `part-00000-random_uuid.gz.parquet` 到 `part-00008-random_uuid.gz.parquet`。但是，如果没有 ID 介于 `200` 和 `350` 之间的行，则其中一个已完成的分区为空，并且不会为其创建任何文件。在前面的示例中，未创建 `part-00001-random_uuid.gz.parquet`。
+ 较早的约定：

  ```
  part-partition_index-random_uuid.format-based_extension
  ```

  这与当前约定相同，但没有 `batch_index` 前缀，例如：

  ```
  part-00000-c5a881bb-58ff-4ee6-1111-b41ecff340a3-c000.gz.parquet
  part-00001-d7a881cc-88cc-5ab7-2222-c41ecab340a4-c000.gz.parquet
  part-00002-f5a991ab-59aa-7fa6-3333-d41eccd340a7-c000.gz.parquet
  ```

文件命名约定可能会更改。因此，在读取目标表时，我们建议您读取表的基本前缀内的所有内容。

# Amazon RDS 导出到 Amazon S3 存储桶时的数据转换
<a name="USER_ExportSnapshot.data-types"></a>

将数据库快照导出到 Amazon S3 存储桶时，Amazon RDS 以 Parquet 格式转换数据、导出数据并存储数据。有关 Parquet 的更多信息，请参阅 [Apache Parquet](https://parquet.apache.org/docs/) 网站。

Parquet 将所有数据存储为以下原始类型之一：
+ BOOLEAN
+ INT32
+ INT64
+ INT96
+ FLOAT
+ DOUBLE
+ BYTE\$1ARRAY – 一个可变长度的字节数组，也称为二进制
+ FIXED\$1LEN\$1BYTE\$1ARRAY – 当值具有恒定大小时使用的固定长度字节数组

Parquet 数据类型很少能减少读取和写入格式的复杂性。Parquet 提供了用于扩展原始类型的逻辑类型。*逻辑类型*实现为具有 `LogicalType` 元数据字段中数据的注释。逻辑类型注释说明如何解释原始类型。

当 `STRING` 逻辑类型注释 `BYTE_ARRAY` 类型时，它表示字节数组应被解释为 UTF-8 编码的字符串。导出任务完成后，如果发生了任何字符串转换，则 Amazon RDS 会通知您。导出的基础数据始终与源中的数据相同。但是，由于 UTF-8 中的编码差异，在工具（如 Athena）中读取时，某些字符可能会显示与源不同。

有关更多信息，请参阅 Parquet 文档中的 [Parquet 逻辑类型定义](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md)。

**Topics**
+ [MySQL 和 MariaDB 数据类型到 Parquet 的映射](#USER_ExportSnapshot.data-types.MySQL)
+ [PostgreSQL 数据类型到 Parquet 的映射](#USER_ExportSnapshot.data-types.PostgreSQL)

## MySQL 和 MariaDB 数据类型到 Parquet 的映射
<a name="USER_ExportSnapshot.data-types.MySQL"></a>

下表显示在将数据转换并导出到 Amazon S3 时从 MySQL 和 MariaDB 数据类型到 Parquet 数据类型的映射。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.data-types.html)

## PostgreSQL 数据类型到 Parquet 的映射
<a name="USER_ExportSnapshot.data-types.PostgreSQL"></a>

下表显示在将数据转换并导出到 Amazon S3 时从 PostgreSQL 数据类型到 Parquet 数据类型的映射。


| PostgreSQL 数据类型 | Parquet 原始类型 | 逻辑类型注释 | 映射注释 | 
| --- | --- | --- | --- | 
| 数字数据类型 | 
| BIGINT | INT64 |  |   | 
| BIGSERIAL | INT64 |  |   | 
| DECIMAL | BYTE\$1ARRAY | STRING | DECIMAL 类型转换为 BYTE\$1ARRAY 类型的字符串，并编码为 UTF8。此转换是为了避免由于数据精度和非数字 (NaN) 的数据值而引起的复杂性。 | 
| DOUBLE PRECISION | DOUBLE |  |   | 
| INTEGER | INT32 |  |   | 
| MONEY | BYTE\$1ARRAY | STRING |   | 
| REAL | FLOAT |  |   | 
| SERIAL | INT32 |  |   | 
| SMALLINT | INT32 | INT(16, true) |   | 
| SMALLSERIAL | INT32 | INT(16, true) |   | 
| 字符串和相关数据类型 | 
| ARRAY | BYTE\$1ARRAY | STRING |  数组转换为字符串并编码为 BINARY (UTF8)。 此转换是为了避免因数据精度、非数字 (NaN) 的数据值和时间数据值而产生的复杂性。  | 
| BIT | BYTE\$1ARRAY | STRING |   | 
| BIT VARYING | BYTE\$1ARRAY | STRING |   | 
| BYTEA | BINARY |  |   | 
| CHAR | BYTE\$1ARRAY | STRING |   | 
| CHAR(N) | BYTE\$1ARRAY | STRING |   | 
| ENUM | BYTE\$1ARRAY | STRING |   | 
| NAME | BYTE\$1ARRAY | STRING |   | 
| TEXT | BYTE\$1ARRAY | STRING |   | 
| 文本搜索 | BYTE\$1ARRAY | STRING |   | 
| VARCHAR(N) | BYTE\$1ARRAY | STRING |   | 
| XML | BYTE\$1ARRAY | STRING |   | 
| 日期和时间数据类型 | 
| DATE | BYTE\$1ARRAY | STRING |   | 
| INTERVAL | BYTE\$1ARRAY | STRING |   | 
| TIME | BYTE\$1ARRAY | STRING |  | 
| 带时区的时间 | BYTE\$1ARRAY | STRING |  | 
| TIMESTAMP | BYTE\$1ARRAY | STRING |  | 
| TIMESTAMP（有时区） | BYTE\$1ARRAY | STRING |  | 
| 几何数据类型 | 
| BOX | BYTE\$1ARRAY | STRING |   | 
| CIRCLE | BYTE\$1ARRAY | STRING |   | 
| LINE | BYTE\$1ARRAY | STRING |   | 
| LINESEGMENT | BYTE\$1ARRAY | STRING |   | 
| 路径 | BYTE\$1ARRAY | STRING |   | 
| POINT | BYTE\$1ARRAY | STRING |   | 
| POLYGON | BYTE\$1ARRAY | STRING |   | 
| JSON 数据类型 | 
| JSON | BYTE\$1ARRAY | STRING |   | 
| JSONB | BYTE\$1ARRAY | STRING |   | 
| 其他数据类型 | 
| BOOLEAN | BOOLEAN |  |   | 
| CIDR | BYTE\$1ARRAY | STRING |  网络数据类型 | 
| COMPOSITE | BYTE\$1ARRAY | STRING |   | 
| DOMAIN | BYTE\$1ARRAY | STRING |   | 
| INET | BYTE\$1ARRAY | STRING |  网络数据类型 | 
| MACADDR | BYTE\$1ARRAY | STRING |   | 
| 对象标识符 | 不适用 |  |  | 
| PG\$1LSN | BYTE\$1ARRAY | STRING |   | 
| RANGE | BYTE\$1ARRAY | STRING |   | 
| UUID | BYTE\$1ARRAY | STRING |   | 