繁体   English   中英

MySQL 中的变更数据捕获

[英]Change Data Capture in MySQL

在我的数据库中,我想在列更改时跟踪它的值。以这样的方式,每次字段的值更改时,我们都可以知道以前的值是多少。为每个更改分配时间戳会很棒。我我使用 MySQL 作为数据库服务器。

我建议您查看Debezium一个开源 CDC 平台,除其他外,它还支持 MySQL

您可以使用 Debezium 将更改流式传输到 Apache Kafka,但通过其嵌入式模式,您还可以将 Debezium 连接器用作 Java 应用程序中的库,并将数据更改轻松传播到其他流式 API,例如 Kinesis 等。

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

为此,您需要创建一个触发器,它是在给定表上发生INSERT, UPDATE, DELETE时触发的事件。

查看CREATE TRIGGER的文档。

对于你想要做什么,你可能需要有一个具有插入每一行的辅助表INSERT/UPDATE主表, AFTER正好包含行的ID改变,旧值新值和时间戳.

抱歉,我的回答很晚,我想提一下另一个尚未在另一个答案中调用的工具maxwell它是一个 CDC,它读取二进制日志并在 Kafka 上发送消息。 这个解决方案的一大优势是它不需要对 MySQL 服务器进行任何更改(没有触发器来创建 ..)。

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

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

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

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

我也写了关于它的博客

特征

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

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

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

首先,安装后将有一个名为 Sybase Central 的产品,您需要打开它。 当它打开时,将有一个向导引导您完成针对 MySQL 数据库的 MobiLink 配置。 我认为如果您遇到困难,安装的帮助中有一个演练,但我现在无法访问它以进行验证。

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

希望有帮助....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM