为什么尽管我的 AWS DMS 任务成功了,但没有从 Amazon S3 源终端节点迁移数据?

上次更新时间:2020 年 9 月 4 日

我的 AWS Database Migration Service (AWS DMS) 任务成功,但没有从我的 Amazon Simple Storage Service (Amazon S3) 源终端节点迁移数据。为什么我的数据没有迁移?如何解决此问题?

简短描述

以下是 AWS DMS 任务成功但没有迁移数据的几个最常见原因:

  1. 任务状态为加载完成,复制正在进行,但目标没有数据加载。
  2. 任务状态为加载完成,复制正在进行,但表统计数据部分中没有表。
  3. 任务状态为正在运行,且目标终端节点中创建了表,但是没有加载数据。另外,您还会在复制日志中收到一条没有响应正文错误。

解决方法

1.任务状态为“加载完成,复制正在进行”,但目标没有数据加载

确认为源终端节点定义的 Amazon S3 路径是否正确。从复制日志中,查看日志条目。查看表明 AWS DMS 无法在为源终端节点定义的 Amazon 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

要使 Amazon S3 源终端节点能够找到数据文件,有三个重要字段:

  • 存储桶文件夹
  • 更改数据捕获 (CDC) 路径
  • 表结构

在前面列出的示例文件路径中,dms-folder/sub-folder桶文件夹 您在创建 Amazon 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 中的相同文件夹中。如果未指定存储桶文件夹,则 TablePathCDC 路径将直接位于 S3 存储桶下。 
  • Amazon S3 源终端节点的存储桶文件夹字段可以是 S3 存储桶名称与表结构架构名称之间的任何文件夹目录。在以上示例中,它是 dms-schema。如果 S3 存储桶下没有文件夹层次结构,可以将这些字段留空。
  • 存储桶文件夹或 CDC 路径可以是单个文件夹,也可以包含子文件夹,例如 dms-folderdms-folder/sub-folder

如果 DMS 任务设置使用 Amazon S3 作为源终端节点,必须在表映射中包含架构和表。这是成功将数据迁移到目标的必要条件。有关更多信息,请参阅 Amazon S3 的源数据类型

如果您将删除目标上的表作为任务的表准备模式,则 DMS 会创建目标表 dms_schema.dms_table。请参阅以下示例:

CREATE TABLE 'dms_schema'.'dms_table' (…);

注意:Amazon S3 中的文件夹和对象名称区分大小写。请确保在 S3 终端节点中指定大小写正确的文件夹和对象名称。

2.任务状态为“加载完成,复制正在进行”,但“表统计数据”部分中没有表

当使用删除目标上的表时,您可能会发现没有在目标终端节点中创建表。这意味着问题可能是由为 Amazon S3 源终端节点指定的表结构引起的。

确认源终端节点的 Amazon S3 路径是正确的,如前所述。然后,验证您的数据类型受 Amazon S3 终端节点的支持

在确认 Amazon S3 路径正确,且您的数据类型受支持之后,请检查您的 DMS 任务的表映射所定义的筛选条件,以确认筛选条件是否是导致表缺失的原因。查看任务表映射中所需的表,并检查 Amazon S3 源终端节点的表结构中是否定义了该表。

3.任务状态为“正在运行”,且目标端创建了表,但未加载数据

如果 AWS DMS 无法从 Amazon S3 路径获取内容,您可以在复制日志中找到错误。请参阅以下示例:
[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)

当 Amazon S3 源终端节点的 AWS Identity and Access Management (IAM) 角色没有正确的权限 s3:GetObject 时,会发生此错误。要解决此错误,请确认该数据文件存在于错误消息中的 Amazon S3 路径中。然后,确认 IAM 用户具有 s3:GetObject 权限。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?