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

上次更新时间:2020 年 1 月 23 日

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

简短描述

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

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

解决方法

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 路径表结构。 在前面列出的示例文件路径中,当创建 Amazon S3 源终端节点时,您输入的 dms-folder/sub-folder/存储桶文件夹dms-cdc-path/dms-cdc-sub-path/CDC 路径。以下示例表结构使用与前面列出的示例文件路径相同:

{
  "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 存储桶。 
  • Amazon S3 源终端节点的存储桶文件夹字段是 S3 存储桶名称与表结构架构名称(示例中为 dms-schema)之间的任何文件夹目录。如果您的 S3 存储桶下没有文件夹层次结构,例如前面示例中的 dms-folder/sub-folder,则您可以将这些字段留空。
  • 存储桶文件夹或 CDC 路径可以是单个文件夹,也可以包含子文件夹,例如 dms-folderdms-folder/sub-folder

如果您的 AWS DMS 任务设置使用 Amazon S3 作为源终端节点,则架构 (dms_schema) 和表 (dms_table) 必须包含在表映射中,才能确保数据成功迁移到目标。有关更多信息,请参阅 Amazon S3 的源数据类型

如果您为 AWS DMS 任务的表准备模式选择删除目标上的表,则 AWS DMS 会创建表 dms_schema.dms_table,如以下示例所示:

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

如果您使用不执行操作截断的表准备模式,则必须手动创建 dms_schema.dms_table 表,并使用 Amazon S3 源终端节点中指定的表结构。

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

如果使用删除目标上的表作为表准备模式时目标终端节点上没有创建表,则问题可能是由为 Amazon S3 终端节点指定的表结构导致的。

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

在确认 Amazon S3 路径正确,且您的数据类型受支持之后,请检查您的 AWS 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 的权限。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?