防止 MySQL 的 CDC 程序读取行以避免冗余数据

Prevent rows from being read by a CDC program for MySQL to avoid redundant data

我正在通过使用 CDC 工具(我正在使用 Zendesk 的 Maxwell)从数据库中读取数据,以及我正在编写的另一个程序将数据写入数据库,从而将遗留应用程序的数据库连接到另一个数据库来自其他地方的数据库。

问题是当外来数据写入遗留数据库时,CDC工具会把它捡起来。我想阻止这种情况,因为其他系统中已经存在该外部数据。

我考虑过为遗留数据库中的所有表添加一列,例如称为 _origin,并将每一行的来源放在该列中。问题是遗留应用程序会进行大量更新,因此 CDC 工具会错过真正的更新,因为 _origin 列不会更改。

有没有办法以某种方式将元数据写入 MySQL binlog 以指示此特定事务的来源?我将不得不弄清楚如何使用 CDC 工具读取它或修改 CDC 工具来读取此类元数据,但我想看看它是否可能。

或者,有更好的方法吗?

不,无法将您自己的自定义元数据写入二进制日志。只是数据本身,以及某些会话变量。

一种解决方案是当您从 CDC 读取数据以插入目标数据库时,使用 REPLACE 而不是 INSERT。语法相同,但如果该行已存在,它会覆盖而不是追加。