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

2 分钟阅读
0

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

简短描述

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

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

解决方法

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

确认为源终端节点定义的 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 终端节点中指定大小写正确的文件夹和对象名称。

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

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

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

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

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

如果 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 权限。
**注意:**如果源 Amazon S3 存储桶启用了版本控制,则需要额外的 s3:GetObjectVersion 权限。


相关信息

将 Amazon S3 作为 AWS DMS 源

相关视频

AWS 官方
AWS 官方已更新 2 年前
没有评论