mysql - 如何审核数据库中的更改?

标签 mysql database

如何正确跟踪典型 MySQL 数据库中的状态?

即回答诸如表中特定行的历史记录之类的问题。

  1. 何时更改
  2. 发生了什么变化
  3. 谁随着时间的推移改变了它。

一位同事暗示我使用“ 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/

相关文章:

mysql - 从 MySql 表中删除重复行

由于长 blob 列,MySQL 在表中读/写速度非常慢

database - 在 2 个网络服务之间同步 postgres 数据库表

php - 尝试连接本地服务器上的 PDO

mysql - 可包含可定制产品 (RDMS) 的订单的数据库架构

mysql - 如何在关系数据库中存储不同版本的数据?

mysql - 如何在 MySQL 中使用 group_concat 返回单行以及多个条目

mysql - 我可以在不区分大小写的文件系统上强制 MySql 表名区分大小写吗

MySQL group by 同时选择聚合和一条特定记录

php - 如何在 laravel 中限制每小时的用户请求