MySQL中的更改数据捕获

MySQL中的更改数据捕获,mysql,sql,Mysql,Sql,在我的数据库中,我希望在列发生更改时跟踪它的值。这样,每当字段的值发生更改时,我们都可以知道以前的值是什么。为每个更改分配时间戳将非常棒。我使用MySQL作为数据库服务器。要做到这一点,您需要创建一个触发器,这是在给定表上发生INSERT、UPDATE、DELETE时触发的事件 请查看文档以了解更多信息 对于您想要做的事情,您可能需要有一个辅助表,该表在主表上为每个INSERT/UPDATE插入一行,在之后,它包含更改的行ID、旧值、新值和时间戳。以下是我的建议。这可能是一点小小的工作,但如果您

在我的数据库中,我希望在列发生更改时跟踪它的值。这样,每当字段的值发生更改时,我们都可以知道以前的值是什么。为每个更改分配时间戳将非常棒。我使用MySQL作为数据库服务器。

要做到这一点,您需要创建一个触发器,这是在给定表上发生
INSERT、UPDATE、DELETE
时触发的事件

请查看文档以了解更多信息


对于您想要做的事情,您可能需要有一个辅助表,该表在主表上为每个
INSERT/UPDATE
插入一行,在
之后,它包含更改的行ID、旧值、新值和时间戳。

以下是我的建议。这可能是一点小小的工作,但如果您这样做,我真的认为您将有一个在MySQL中进行更改数据捕获的可靠方法。请记住,当您考虑到锁定和隔离级别等问题时,在数据库中进行更改跟踪实际上是一件非常困难的事情。我强烈建议使用这样的过程

看看iAnywhere的一款名为MobiLink的产品。您可以从下载免费的开发者版本。MobiLink的目的是允许您将数据更改从MySQL等数据库同步到SQL Anywhere数据库。当然,您唯一感兴趣的部分是从MySQL获取更改的能力。幸运的是,MobiLink将非常有效地在MySQL数据库中创建这些更改数据捕获触发器。事实上,它甚至会为您提供用于执行此操作的sql脚本,以防您需要再次执行此操作。之后,您可以在任何地方卸载SQL

首先,在安装之后,需要打开一个名为Sybase Central的产品。当这个窗口打开时,将会有一个向导指导您根据MySQL数据库配置MobiLink。我认为如果您遇到问题,在安装的帮助中会有一个演练,但我现在无法访问它进行验证

运行向导后,它将为更改数据捕获配置MySQL数据库。如果您查看数据库,您还将拥有所需的所有触发器和更改跟踪列


希望这会有所帮助……

触发器并不总是在数据库中记录更改事件的最佳方式。一旦表的模式发生变化,As触发器就会失效,这反过来会导致实际的表操作失败

对于mysql,您需要从二进制日志文件中捕获更改事件。Mysql提供了读取二进制日志的API(5.6版之后)

您可能还想查看,它提供了类似Oracle的物化视图日志来记录更改事件。

我创建了一个名为的工具,可以自动在mysql中为任何或所有表创建审计表,甚至保留预先存在的触发器。我写这篇文章时考虑到了变更数据捕获(针对数据仓库ETL应用程序)。也许你或某人会发现它很有用

我也是

特征

  • 自动生成审核表
  • 自动生成触发器以填充审核表
  • 自动将审核表中的新行同步到.csv文件
  • 读取mysql信息以自动确定表和列
  • 可以为所有数据库表或指定列表生成表+触发器
  • 可以同步所有数据库表或指定列表的审核表
  • 在生成后触发器时保留预先存在的触发器逻辑(如果有)
  • 同步脚本选项,删除除最后一行之外的所有审核行,以保持源数据库较小

我建议您看看开源的CDC平台,其中包括

您可以使用Debezium将更改流式传输到ApacheKafka,但通过它,您还可以在Java应用程序中将Debezium连接器用作库,并轻松地将数据更改传播到其他流式API,如Kinesis等


免责声明:我是Debezium项目负责人。

很抱歉回答得太晚,我想提及另一个在另一个回答中没有被调用的工具,它是一个CDC,可以读取Binlog并发送卡夫卡消息。此解决方案的最大优点是不需要对MySQL服务器进行任何更改(无需创建触发器)