我正在使用CDC工具(我正在使用Zendesk的Maxwell)将旧版应用程序的数据库连接到另一个数据库,以从数据库中读取数据,而我正在编写另一个程序以将数据写入到原始数据库中其他地方。
问题是,当将外部数据写入旧数据库时,CDC工具将对其进行提取。我想防止这种情况,因为其他系统中已经存在外部数据。
我曾考虑过将一列添加到旧数据库的所有表中,例如_origin
,并将每一行的原点放在该列中。这样做的问题是,遗留应用程序会进行大量更新,因此CDC工具将错过实际更新,因为_origin
列不会更改。
是否有办法以某种方式将元数据写入MySQL binlog中以指示此特定事务的来源?我将不得不弄清楚如何使用CDC工具读取它或修改CDC工具以读取此类元数据,但我想看看它是否有可能。
或者,有没有更好的方法?
不,无法将自己的自定义元数据写入binlog。只是数据本身,还有某些会话变量。
一种解决方法是,当您从CDC读取数据以插入目标数据库时,使用REPLACE
而不是INSERT
。语法相同,但是如果该行已经存在,它将覆盖而不是附加。