数据迁移服务 (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):出现错误后如何继续(无法执行删除语句)?的主要内容,如果未能解决你的问题,请参考以下文章