AWS Database Migration Service
用户指南 (版本 API Version 2016-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 Amazon S3 用作 AWS Database Migration Service 的目标

您可以使用 AWS DMS 从任意支持的数据库源将数据迁移到 Amazon S3。使用 S3 作为 AWS DMS 任务的目标时,完全加载和更改数据捕获 (CDC) 数据以逗号分隔值 (CSV) 格式写入。AWS DMS 使用增量计数器命名完全加载期间创建的文件,例如 LOAD00001.csv、LOAD00002 等等。AWS DMS 使用时间戳命名 CDC 文件,例如 20141029-1134010000.csv。对于各个源表,AWS DMS 在指定的目标文件夹下创建文件夹。AWS DMS 将所有完全加载和 CDC 文件写入到指定的 S3 存储桶。

参数 bucketFolder 包含 .csv 文件在上传到 S3 存储桶之前的存储位置。表数据使用以下格式存储在 S3 存储桶中。

<schema_name>/<table_name>/LOAD001.csv <schema_name>/<table_name>/LOAD002.csv <schema_name>/<table_name>/<time-stamp>.csv

您可以使用额外连接属性指定列分隔符、行分隔符以及其他参数。有关额外连接属性的更多信息,请参阅此部分结尾的将 Amazon S3 用作 AWS DMS 目标时的额外连接属性

在使用 AWS DMS 复制数据更改时,CSV 输出文件的第一列指示如何更改数据,如下所示:

I,101,Smith,Bob,4-Jun-14,New York U,101,Smith,Bob,8-Oct-15,Los Angeles U,101,Smith,Bob,13-Mar-17,Dallas D,101,Smith,Bob,13-Mar-17,Dallas

对于该示例,假设在源数据库中具有一个 EMPLOYEE 表。AWS DMS 将数据写入到 CSV 文件以响应以下事件:

  • 14 年 6 月 4 日,纽约办事处聘用了一名新员工 (Bob Smith,员工 ID 101)。在 CSV 文件中,第一列中的 I 指示在源数据库的 EMPLOYEE 表中插入 (INSERT) 了一个新行。

  • 15 年 10 月 8 日,Bob 调到了洛杉矶办事处。在 CSV 文件中,U 指示更新 (UPDATE) 了 EMPLOYEE 表中的相应行以反映 Bob 的新办公地点。该行的其余部分反映更新 (UPDATE) 后如何显示该 EMPLOYEE 表行。

  • 17 年 3 月 13 日,Bob 又调到了达拉斯办事处。在 CSV 文件中,U 指示再次更新 (UPDATE) 了该行。该行的其余部分反映更新 (UPDATE) 后如何显示该 EMPLOYEE 表行。

  • 在达拉斯工作一段时间后,Bob 离开了公司。在 CSV 文件中,D 指示在源表中删除 (DELETE) 了该行。该行的其余部分反映在删除之前如何显示该 EMPLOYEE 表行。

将 Amazon S3 作为目标的先决条件

作为目标的 Amazon S3 存储桶必须位于与用于迁移数据的 DMS 复制实例相同的区域中。

在迁移中使用的 AWS 账户必须具有用作目标的 Amazon S3 存储桶的写入和删除访问权限。向用于创建迁移任务的用户账户分配的角色必须具有以下权限集合。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::buckettest2*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::buckettest2*" ] } ] }

将 Amazon S3 作为目标的限制

以下限制适用于作为目标的 Amazon S3 中的文件:

  • 只支持以下数据定义语言 (DDL) 命令:TRUNCATE TABLE,DROP TABLE 和 CREATE TABLE。

  • 不支持完整 LOB 模式。

  • 不支持在完全加载期间对源表结构进行更改。支持在完全加载期间更改数据。

  • 将多个任务从同一源表复制到同一目标 S3 终端节点存储桶将导致这些任务写入到同一文件。如果您的数据源来自同一个表,我们建议您指定不同的目标终端节点 (存储桶)。

安全性

要使用 Amazon S3 作为目标,在迁移中使用的账户必须具有对作为目标的 Amazon S3 存储桶的写入和删除访问权限。对于具有访问 Amazon S3 所需权限的 IAM 角色,必须指定该角色的 Amazon 资源名称 (ARN)。

对于 Amazon S3,AWS DMS 支持一组预定义的授权(称为标准 ACL)。每个标准 ACL 具有一组被授予者和权限,可用于为 Amazon S3 存储桶设置权限。您可以将 cannedAclForObjects 用于 S3 目标终端节点的连接字符串属性以指定标准 ACL。有关使用额外连接属性 cannedAclForObjects 的更多信息,请参阅将 Amazon S3 用作 AWS DMS 目标时的额外连接属性。有关 Amazon S3 标准 ACL 的更多信息,请参阅标准 ACL

用于迁移的 IAM 角色必须能够执行 s3:PutObjectAcl API 操作。

将 Amazon S3 用作 AWS DMS 目标时的额外连接属性

您可以指定以下选项作为额外的连接属性。应将多个额外连接属性设置用分号隔开。

选项 描述
addColumnName

一个可选参数,可用于将列名称信息添加到 .csv 输出文件中。默认为 false。

示例:

addColumnName=true;

bucketFolder

一个可选参数,用于在 S3 存储桶中设置文件夹的名称。如果提供,则将在路径 <bucketFolder>/<schema_name>/<table_name>/ 中创建表。如果未指定该参数,则使用的路径为 <schema_name>/<table_name>/。

示例:

bucketFolder=testFolder;

bucketName

S3 存储桶的名称。

示例:

bucketName=buckettest;

cannedAclForObjects

允许 AWS DMS 为写入到 S3 存储桶的对象指定预定义(标准)访问控制列表。有关 Amazon S3 标准 ACL 的更多信息,请参阅 Amazon S3 开发人员指南中的标准 ACL

示例:

cannedAclForObjects=PUBLIC_READ;

该属性的有效值为:NONE、PRIVATE、PUBLIC_READ、PUBLIC_READ_WRITE、AUTHENTICATED_READ、AWS_EXEC_READ、BUCKET_OWNER_READ、BUCKET_OWNER_FULL_CONTROL。

如果未指定该属性,则默认为 NONE。

cdcInsertsOnly

一个可选参数,用于仅将 INSERT 操作写入到 .CSV 输出文件中。默认情况下,.CSV 记录中的第一个字段包含字母 I (插入)、U (更新) 或 D (删除),以指示是否在源数据库中插入、更新或删除了行。如果 cdcInsertsOnly 设置为 true,则仅在 CSV 文件中记录 INSERT,而不添加任何 I 注释。

例如:

cdcInsertsOnly=true;

compressionType

一个使用 GZIP 压缩目标文件的可选参数。设置为 NONE (默认值) 或不使用该参数时,将不压缩文件。

例如:

compressionType=GZIP;

csvRowDelimiter

源文件中用于分隔行的分隔符。默认值为回车符 (\n)。

例如:

csvRowDelimiter=\n;

csvDelimiter

源文件中用于分隔列的分隔符。默认值为逗号。

例如:

csvDelimiter=,;

maxFileSize

指定在完整加载期间,迁移到 S3 目标时所要创建的任意 CSV 文件的最大大小(以 KB 为单位)。

默认值:1048576 KB (1 GB)

有效值:1 – 1048576

示例:

maxFileSize=512

rfc4180

用于控制有数据迁移到 Amazon S3 的 RFC 合规行为的可选参数。将 Amazon S3 用作目标时,如果数据中有引号或新行字符,AWS DMS 随后会使用一个额外的 " 将整个列括起。数据中的每个引号将被重复两次。这符合 RFC 4180 的要求。

默认为 true

示例:

rfc4180=false;