【发布时间】:2010-07-11 16:52:31
【问题描述】:
我正在研究记录对 MySQL 数据库所做的所有更改(包括可能发生的 DDL 语句)并使用该信息以便与远程数据库同步的可能性。
应用程序本身是用 C# 编写的,因此到目前为止我所看到的最好的同步技术是 Microsoft Sync Framework。该框架本身提出了一种解决方案,通过添加触发器和附加表来存储已删除的行来跟踪对数据库所做的更改。
这对我来说似乎不是一个好主意,因为它涉及更改超过 4 种产品使用的标准数据库的架构。这种方法还有效地使表的数量增加了一倍(通过为每个表的已删除行添加一个新表),这也感觉不好。
另一方面,MySQL 有一个很棒的东西 binlog,它可以跟踪所有的变化,并且在大多数情况下也可以使用所谓的混合模式来跟踪语句(因此它们可以在远程 DB 上再次执行以复制数据)和调用非确定性函数时的原始数据(如 NOW()),因此更新的数据在两个地方都是相同的。
似乎还有 2 种标准方法可以检索此数据: 1) mysqlbinlog 实用程序 2) 调用“SHOW BINLOG EVENTS”
选项 2 对我来说似乎更好,因为它不需要调用另一个外部应用程序,也不需要在数据库机器上运行应用程序,但它不包括记录的 ROW 格式语句的实际数据(只有类似:table_id: 47 个标志:STMT_END_F 什么都不告诉我)。
所以最后我的问题是:
有没有更好的方法来跟踪对 MySQL 数据库所做的更改,而无需更改整个结构并添加大量触发器和表?我也可以更改产品以记录其更改,但是我们必须使用此数据库更改所有产品以确保我们记录所有内容……而且我认为几乎不可能说服所有人。
我能否获得有关使用 SHOW BINLOG EVENTS 所做更改的所有信息?包括 ROW 数据。
附:我也研究了 MySQL Proxy,但在所有情况下记录语句的问题是不包括非确定性函数中的实际数据。
【问题讨论】: