0

目前使用 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>
4

2 回答 2

1

因此,查看此任务的 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 排除在外,我能够复制该问题。

于 2021-03-01T17:48:59.267 回答
0

如何修复损坏的复制的唯一选项是“重新加载表数据”。

在 AWS 控制台 DMS 中选择您的迁移任务,转到“表统计信息”选项卡并选择您的表,该表已被 Percona 工具在后台更改(重命名)。

简而言之,“重新加载表数据”操作会刷新复制实例、清理缓存并为 S3 中的数据创建新快照。在 S3 中创建新快照会导致您的复制在一段时间内不同步。恢复复制的时间将线性地取决于表中的数据量和所选复制实例的性能。

不幸的是,DMS 不支持 RENAME TABLE 语句,并假设没有其他人可以正确支持它,因为它破坏了数据校验和(或 AWS 中的检查点)。

于 2021-10-20T23:33:38.060 回答