如何正确跟踪典型 MySQL 数据库中的状态?
即回答诸如表中特定行的历史记录之类的问题。
- 何时更改
- 发生了什么变化
- 谁随着时间的推移改变了它。
一位同事暗示我使用“ key 交换”来解决这个问题,但我有点困惑如何实现这种做法。
最佳答案
审计的方法有很多种。虽然我不熟悉与数据库审计相关的 key 交换,但这些是我熟悉的方法:
MySQL 企业审计
https://www.mysql.com/products/enterprise/audit.html有官方文档。有一个博客描述了企业审计,并提供了一些可能对您有帮助的示例。 https://scriptingmysql.wordpress.com/2014/03/14/installing-and-testing-the-mysql-enterprise-audit-plugin/
历史表
我审计表的方法之一是创建与基表结构相似的历史表,并在将新数据写入基表之前放置触发器以将旧数据写入该表。用于存储记录存档日期的附加日期/时间列还有助于查询。
例如,sale_order
表有一个 sale_order_history
表。
审核表
单个审核表,其中包含操作(即插入、更新、删除)、存档(日期/时间)、存档者(导致此记录被存档的人)、表名和 clob/blob 等列,以将原始数据存储为JSON 或二进制数据。这将是一个表,其中会涌入来自多个表的存档数据。根据更改量,该表可能会变得非常大。
将数据流式传输到另一个数据库
我见过但自己没有做过的另一个模型是将旧数据推送到消息队列(例如 RabbitMQ)。队列的订阅者将数据写入与原始数据库分开的存档表。此方法保持原始数据库实例精简,但必须将创造性查询写入差异数据。应用程序层编写了审计,这并没有让 DBA 满意。
关于mysql - 如何审核数据库中的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53643213/