为什么尽管我的 AWS DMS 任务成功了,但 AWS DMS 却没有从我的 Amazon S3 源端点迁移数据?
我的 AWS Database Migration Service (AWS DMS) 任务成功了,但却没有从我的 Amazon Simple Storage Service (Amazon S3) 源端点迁移数据。我想对此问题进行故障排除。
解决方法
AWS DMS 任务成功但未迁移数据的原因有很多。完成适合您的使用案例的解决方法。
任务状态为 "Load complete, replication ongoing"(“加载完成,复制正在进行”),但 AWS DMS 任务未在目标上加载数据
确认您为源端点定义的 S3 路径是否正确。在复制日志中,找出显示 AWS DMS 无法在 S3 路径中找到数据文件的条目。
复制日志条目示例:
[SOURCE_UNLOAD ]I: Unload finished for table 'dms_schema'.'dms_table' (Id = 1). 0 rows sent. (streamcomponent.c:3396) [TARGET_LOAD ]I: Load finished for table 'dms_schema'.'dms_table' (Id = 1). 0 rows received. 0 rows skipped. Volume transferred 0. (streamcomponent.c:3667)
Amazon S3 以如下格式存储全量加载阶段的数据文件 (data.csv) 和正在进行更改的数据文件 (change_data.csv):
- S3-bucket/dms-folder/sub-folder/dms_schema/dms_table/data.csv
- S3-bucket/dms-folder/sub-folder/dms-cdc-path/dms-cdc-sub-path/change_data.csv
为查找数据文件,S3 源端点会使用存储桶文件夹、更改数据捕获 (CDC) 路径和表结构字段。
在上述示例文件路径中,dms-folder/sub-folder 为存储桶文件夹。您在创建 S3 源端点时输入的 CDC 路径为 dms-cdc-path/dms-cdc-sub-path。
使用示例文件路径的示例表结构:
{ "TableCount": 1, "Tables": [ { "TableColumns": […], "TableColumnsTotal": "1", "TableName": "dms_table", "TableOwner": "dms_schema", "TablePath": "dms_schema/dms_table/" } ] }
**重要事项:**不要在表结构的 TablePath 中包含 dms-folder/sub-folder 存储桶文件夹路径。
指定端点配置时,存储桶文件夹是可选的。如果指定存储桶文件夹,则 CDC 路径和 TablePath 必须位于 Amazon S3 中的同一个文件夹内。如果未指定存储桶文件夹,则 TablePath 和 CDC 路径将直接位于 S3 存储桶下方。
S3 源端点的存储桶文件夹可以是存储桶名称和表结构的架构名称之间的任意文件夹目录。在上述示例表结构中,文件夹目录为 dms-schema。如果存储桶下没有文件夹层次结构,请将该字段留空。
**注意:**存储桶文件夹和 CDC 路径可以是单个文件夹,也可以包括子文件夹,例如 dms-folder 或 dms-folder/sub-folder。
如果您的 DMS 任务设置使用 S3 源端点,则您必须在表映射中包含架构和表。要成功将数据迁移到目标,架构和表是必需的。有关详细信息,请参阅将 Amazon S3 的外部表定义为 AWS DMS 的源。
如果您将删除目标中的表用作任务的表准备模式,则 DMS 会创建 dms_schema.dms_table 目标表。
目标表创建命令示例:
CREATE TABLE 'dms_schema'.'dms_table' (...);
**注意:**Amazon S3 中的文件夹和对象名称区分大小写。在 S3 端点中指定文件夹和对象名称时,请使用正确的大小写。
任务状态为 "Load complete, replication ongoing"(“加载完成,复制正在进行”),但 Table statistics(表统计数据)部分中没有表
当您使用删除目标中的表模式时,AWS DMS 可能不会在目标端点中创建表。不正确的 S3 路径或不支持的数据类型可能会导致此问题。
确认源端点的 S3 路径是否正确。然后,验证您的 S3 端点是否支持该数据类型。
检查您的 DMS 任务的表映射定义的筛选条件是否导致了表缺失。确保您在 S3 源端点的表结构中定义了任务表映射中所需的表。
任务状态为 "Running"(“正在运行”),且 DMS 任务在目标端点中创建了表,但未加载数据
如果 AWS DMS 无法从 S3 路径获取数据,请使用复制日志来查找错误。要获取详细日志,请将 SOURCE_CAPTURE 日志级别从 Default(默认值)更改为 Detailed Debug(详细调试)。
日志示例:
[SOURCE_CAPTURE ]E: No response body. Response code: 403 [1001730] (transfer_client.cpp:589) [SOURCE_CAPTURE ]E: failed to download file </dms-folder/sub-folder/dms_schema/dms_table/data.csv> from bucket <dms-test> as </rdsdbdata/data/tasks/NKMBA237MEB4UFSRDF5ZAF3EZQ/bucketFolder/dms-folder/sub-folder/dms_schema/dms_table/data.csv>, status = 4 (FAILED) [1001730] (transfer_client.cpp:592)
您在复制日志中收到 "No response body" 错误
当用于 S3 源端点的 AWS Identity and Access Management (IAM) 角色没有正确的权限时,将会出现 No response body(无响应正文)错误。要解决此问题,请确认数据文件存在于错误消息的 S3 路径中。然后,确认 IAM 用户拥有 s3:GetObject 的权限。
**注意:**如果您在源存储桶上启用了版本控制,则还必须授予 s3:GetObjectVersion 权限。
相关信息
- 语言
- 中文 (简体)
