我正在研究记录对 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 数据。
PS我也研究了MySQL Proxy,但在所有情况下记录语句的问题是不包括非确定性函数中的实际数据。