Our source database is Aurora MySQL (5.7.mysql_aurora.2.11.2) and our target is Redshift Serverless. I've set it for "full load and ongoing". After full load, it runs fine for awhile but eventually it says "Running with errors" and some tables are now suspended. In the logs, we'll see things like this:
2023-09-18T20:14:21 [TARGET_APPLY ]E: 0 rows affected, ODBC return code: 100 [1022510] (cloud_bulk.c:760)
2023-09-18T20:14:21 [TARGET_APPLY ]I: cloud_thread_parallel_net_changes_ops_handler: Failed to apply DELETE (5) for table 632 (cloud_bulk_apply_parallel_net_changes.c:199)
Sometimes it's "Failed to apply UPDATE" and the number in parentheses is different.
We occasionally have problems with Aurora slave replication errors on Aurora read replicas with similar issues. It appears to be trying to update or delete a row that doesn't exist (there was no insert in the CDC/binlog?). In Aurora we have configured it to ignore these replication errors (using mysql.rds_skip_repl_error
) but I don't see any way to do this with DMS. The TableErrorPolicy
task setting seems to govern whether the task continues running (with errors) or stops. I don't see any way to have it skip a table error like this. I've tried changing the various policies mentioned in the Error Handling section of Task Settings in the docs but nothing seems to change its behavior except TableErrorPolicy.
There's nothing in sys_load_error_detail
or awsdms_apply_exceptions
in Redshift. awsdms_suspended_tables
will show the table(s) as suspended with suspend_reason
= TABLE ERROR
.
Questions:
- Is there a way to stop Aurora from sending out UPDATE and DELETE binlog statements for rows that don't exist? Why does this happen in the first place?
- Is there a way to configure DMS to ignore/skip these errors like we can in Aurora?