为什么我的 AWS DMS 任务没有重试?

上次更新日期:2022 年 8 月 18 日

我有一个 AWS Database Migration Service(AWS DMS)任务已停止且未重试。如何恢复我的 AWS DMS 任务的操作?

解决方法

AWS DMS 是一项托管服务,旨在实现自我修复。这意味着,当问题发生时,AWS DMS 会尝试修复问题,然后恢复运行,而无需您采取任何操作。但是,在某些情况下,迁移会停止且不会重试。

首先,很重要的一点是:了解使用 AWS DMS 时可能遇到的两种错误:

  • 致命错误
  • 可恢复的错误

致命错误

如果 AWS DMS 遇到错误,无法继续进行迁移,则任务将停止并进入 FAILED 状态。该错误被称为致命错误。一些示例包括:

  • 源端点未配置,而这是迁移的先决条件。
  • AWS DMS 复制实例不会从源数据库中获取源对象。

在任务日志中,您会看到类似于以下内容的消息:

"2022-05-28T16:07:35 [TASK_MANAGER    ]E:  Task 'K7YJOFK7GYXIK44C2KLGFNG7ZONLZGPWPD5RWHA' encountered a fatal error"(任务‘K7YJOFK7GYXIK44C2KLGFNG7ZONLZGPWPD5RWHA’遇到了致命错误)

当 AWS DMS 遇到致命错误时,它会尝试重启六次。如果您的任务不再重试,那么它可能已经执行完六次尝试。

可恢复的错误

AWS DMS 将所有环境错误视为可恢复的错误。因此,如果任务或复制实例遇到环境错误,则任务会中断,但会自行恢复,然后重试。

可恢复错误的示例包括:

  • AWS DMS 复制实例与源/目标数据库的连接中断。
  • 出于维护原因,复制实例重启。

在任务日志中,您会看到类似于以下内容的消息:

"Last Error Task error notification received from subtask 0, thread 0 [reptask/replicationtask.c:2673] [1022502] Stop Reason RECOVERABLE_ERROR Error Level RECOVERABLE"(收到来自子任务 0 的最后错误任务提示,线程 0 [reptask/replicationtask.c:2673] [1022502] 停止原因 RECOVERABLE_ERROR 错误级别可恢复)

默认情况下,具有可恢复错误的任务会无限期地尝试重试。RecoverableErrorCount 设置可对此行为进行控制。此参数设置 AWS DMS 在遇到环境错误时尝试重启任务的次数上限。在系统尝试重启任务达指定次数后,任务将停止,需要手动干预。默认值为 -1,指示 AWS DMS 无限期地重启任务。

如果可恢复的错误导致任务停止且不再重试,则应进行以下检查:

  • 是否已将 RecoverableErrorCount 参数设置为自定义值。
  • 复制实例本身是否已关闭。

检查其他非默认值的设置是否阻止重试

如果已将这些设置设置为非默认值,则系统可能会阻止 AWS DMS 任务重试:

"ErrorBehavior": {
        "FailOnNoTablesCaptured": false,
        "ApplyErrorUpdatePolicy": "LOG_ERROR",  --- can be set to STOP_TASK
        "FailOnTransactionConsistencyBreached": false,
        "RecoverableErrorThrottlingMax": 1800,
        "DataErrorEscalationPolicy": "SUSPEND_TABLE",  --- can be set to STOP_TASK
        "ApplyErrorEscalationCount": 0,
        "RecoverableErrorStopRetryAfterThrottlingMax": false,
        "RecoverableErrorThrottling": true,
        "ApplyErrorFailOnTruncationDdl": false,
        "DataTruncationErrorPolicy": "LOG_ERROR",  --- can be set to STOP_TASK
        "ApplyErrorInsertPolicy": "LOG_ERROR",  --- can be set to STOP_TASK
        "EventErrorPolicy": "IGNORE",
        "ApplyErrorEscalationPolicy": "LOG_ERROR",  --- can be set to STOP_TASK
        "RecoverableErrorCount": -1,
        "DataErrorEscalationCount": 0,
        "TableErrorEscalationPolicy": "STOP_TASK",
        "RecoverableErrorInterval": 5,
        "ApplyErrorDeletePolicy": "IGNORE_RECORD",  --- can be set to STOP_TASK
        "TableErrorEscalationCount": 0,
        "FullLoadIgnoreConflicts": true,
        "DataErrorPolicy": "LOG_ERROR",
        "TableErrorPolicy": "SUSPEND_TABLE"
    },

这篇文章对您有帮助吗?


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