数据迁移服务 (DMS):出现错误后如何继续(无法执行删除语句)?

Posted

技术标签:

【中文标题】数据迁移服务 (DMS):出现错误后如何继续(无法执行删除语句)?【英文标题】:Data Migration Service (DMS): How do I Continue after Error ( Failed to execute delete statement)? 【发布时间】:2021-10-14 09:48:06 【问题描述】:

AWS/DMS

源 Aurora mysql -> 目标 AuroraMySQL

我的目标是复制所有更改除了删除。

将单个表从源复制到目标。目标表上有一个BEFORE DELETE 触发器,可阻止删除的发生(我想要目标表中的完整历史记录)。

在我删除源上的记录之前,复制工作正常。

来自 CloudWatch 的错误是:

Failed (retcode -1) to execute statement [1022502] (ar_odbc_stmt.c:2721)
RetCode: SQL_ERROR  SqlState: HY000 NativeError: 1644 Message: [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.12]table MyBigTable does not support deletion
Failed to execute delete statement, stream position is mysql-bin-changelog.000011:24635029:0:24637196:47269275079:mysql-bin-changelog.000011:24634899

我的任务设置包括以下 "ApplyErrorDeletePolicy": "IGNORE_RECORD",

但是,DMS 不会“忽略记录”而是失败了。

有没有办法指示 DMS 忽略错误并继续前滚?

【问题讨论】:

【参考方案1】:

事实证明,执行不删除行(无错误)的删除与使用执行信号的触发器停止删除之间存在差异。

CREATE DEFINER=`admin`@`%` TRIGGER NO_DELETES_ON_MYBIGTABLE
BEFORE DELETE
ON MyBigTable FOR EACH ROW
  if (user() like 'repluser%') then
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'table MyBigTable does not support deletion';
  end if

不删除任何行(即表中不存在该行)的删除由 DMS 处理。

有人知道如何在不发出信号的情况下停止 MySQL 中的删除吗? DMS 不处理返回错误(或信号)的删除。

【讨论】:

以上是关于数据迁移服务 (DMS):出现错误后如何继续(无法执行删除语句)?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS DMS 加载数据时如何修剪列

我可以使用数据库迁移服务 (DMS) 将数据迁移到 Redshift 吗?

AWS DMS 迁移问题

AWS DMS 任务在 CDC 模式下一段时间后失败

分布式消息服务DMS如何实现死信消息的消费

AWS DMS 添加新列以跟踪更改