在典型的MySQL数据库中,如何正确地 track 状态?
即回答诸如表中特定行的历史之类的问题。
我的一位同事暗示我使用“密钥交换”来解决此问题,但是我对如何实现这种做法感到有些困惑。
答案 0 :(得分:1)
有许多方法可以执行审计。尽管我不熟悉与数据库审计有关的密钥交换,但是这些是我熟悉的方法:
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满意。