pt-online-schema-change 中断 AWS DMS 复制

问题描述

目前使用 AWS DMS 将数据从我们的 aurora MysqL 数据库复制到 S3。这会产生一个低延迟的数据湖,我们可以使用它来获取发生的所有更改的沿袭,并从中构建额外的数据管道。但是,当通过 pt-online-schema-change 脚本进行更改时,修改后的表完全停止复制。有什么原因会发生这种情况吗?

运行更改后,日志显示源表的架构不再符合 DMS 的预期,并且会跳过 CDC 更改。唯一可能的原因是 DMS 没有正确跟踪 DML 语句。

  1. 使用 percona 触发的表更改(在本例中,添加列)
  2. AWS DMS 同步的新表
  3. 触发器在 AWS DMS 中添加不支持的抛出警告
  4. 表被重命名
  5. 表列数不匹配,忽略额外的列。
  6. 表格列大小不匹配,跳过。

值得注意的是,AWS DMS 和 S3 作为目标支持 Percona 使用的所有 DML 语句(外部触发器)。有没有其他人对这种情况或工具组合有任何经验?

编辑

以下是用于使用 Percona 进行这些更改的命令示例:

pt-online-schema-change --host=<host> \
                        --user=<user> \
                        --ask-pass \
                        --execute \
                        --no-drop-old-table \
                        --no-check-alter \
                        --alter="ADD COLUMN db_row_update_stamp  TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)" \
                        D=<db>,t=<REPLACE_TABLE_NAME_HERE>

解决方法

因此查看此任务的 DETAILED_DEBUG 日志,我正在 AWS DMS 中手动测试重命名场景。

结果如下。

2021-02-27T00:38:43:255381 [SOURCE_CAPTURE  ]T:  Event timestamp '2021-02-27 00:38:38' (1614386318),pos 54593835  (mysql_endpoint_capture.c:3293)
2021-02-27T00:38:43:255388 [SOURCE_CAPTURE  ]D:  > QUERY_EVENT  (mysql_endpoint_capture.c:3306)
2021-02-27T00:38:43:255394 [SOURCE_CAPTURE  ]T:  Default DB = 'my_db'  (mysql_endpoint_capture.c:1713)
2021-02-27T00:38:43:255399 [SOURCE_CAPTURE  ]T:  SQL statement = 'RENAME TABLE test_table TO _test_table_old'  (mysql_endpoint_capture.c:1720)
2021-02-27T00:38:43:255409 [SOURCE_CAPTURE  ]T:  DDL DB = '',table = '',verb = 0  (mysql_endpoint_capture.c:1734)
2021-02-27T00:38:43:255414 [SOURCE_CAPTURE  ]T:  >>> Unsupported or commented out DDL: 'RENAME TABLE test_table TO _test_table_old'  (mysql_endpoint_capture.c:1742)

尽管文档声称支持 RENAME,但此版本的 DMS 似乎无法正确读取 RENAME 语句。

我正在考虑在 AWS 方面打开一个错误。这影响了 AWS DMS 服务器版本 3.4.3。

将针对以前的版本进行测试,如果我发现特定版本已修复此问题,则会发布更新,直到在较新版本中解决为止。不能 100% 声称这是 DMS 中的错误,但是将 Percona 排除在外,我能够重现该问题。