如何使用AWS DMS在S3迁移完成后删除源表已迁移记录
实现AWS DMS迁移至S3 Parquet后删除源SQL记录的方案
方案1:全量迁移场景 - DMS任务+标记字段+Post脚本
适合一次性迁移指定记录的场景:
- 给源库待迁移表添加标记字段:
ALTER TABLE your_target_table ADD COLUMN is_migrated BOOLEAN DEFAULT FALSE; - 配置DMS迁移任务时,在表映射的筛选规则里,仅同步
is_migrated = FALSE的记录。 - 在DMS任务的Post-load脚本中执行以下SQL,确保迁移完成后删除对应记录:
-- 先标记已迁移(可选,用于事后核对) UPDATE your_target_table SET is_migrated = TRUE WHERE is_migrated = FALSE; -- 删除已标记的记录 DELETE FROM your_target_table WHERE is_migrated = TRUE; - 注意:Post-load脚本仅在全量迁移完成后执行,增量迁移场景不适用。
方案2:全量/增量通用 - S3事件触发Lambda删除(最可靠)
该方案能确保Parquet文件成功落地S3后再删除源数据,适配所有迁移模式:
- 给目标S3桶配置事件通知:触发条件选择“对象创建完成”,指定Parquet文件的前缀/后缀(比如
*.parquet),触发目标选择Lambda函数。 - 编写Lambda函数核心逻辑:
- 解析S3事件中的文件元数据,提取已迁移记录的标识(比如文件名中的批次ID、主键范围,或读取Parquet文件内的主键列表)。
- 通过Lambda的IAM权限连接源SQL数据库,执行批量删除语句(例如
DELETE FROM your_target_table WHERE id IN (xxx)或按时间范围删除)。 - 添加错误处理:删除失败时,将失败信息存入SQS或CloudWatch日志,方便后续重试。
- 给Lambda配置必要的IAM权限:S3事件读取权限、源数据库访问权限、CloudWatch日志写入权限。
方案3:增量实时迁移 - DMS CDC+源库触发器
如果是实时CDC同步场景:
- 配置DMS为CDC模式,同步源库新增/更新记录到S3。
- 在源库创建触发器:当记录的
is_migrated字段被设为TRUE时(可通过DMS的转换规则在同步后更新源库标记),自动触发删除操作。 - 注意:触发器需添加判断条件,避免循环触发(例如仅在
is_migrated从FALSE变为TRUE时执行删除)。
关键注意点
- 优先选择方案2:直接基于S3文件生成事件触发删除,能100%确保迁移成功,避免数据丢失。
- 严格匹配删除范围:迁移时明确筛选条件(比如时间、主键),删除时精准对应已迁移的记录集,防止误删。
- 提前备份:删除前对源库做快照或导出备份,应对意外情况。
- 分批删除:针对大量记录,分批次执行删除语句,避免锁表影响源库性能。
内容的提问来源于stack exchange,提问作者Yakitate
相关产品推荐
相关产品推荐

