(Mysql)存储表更改的最有效方法是什么?

时间:2017-07-07 20:53:22

标签: mysql audit-logging

我正在使用mysql开发一个Web应用程序,我有几个表,包括用户文章

由于我想记录已更新所选文章的用户,我想到了三种可能性:

  • 在表文章中添加两列:ART_USE_ID(以了解更改者)和ART_date(以保存日期时间)。
  • 使用CHA_USE_ID,CHA_ART_ID和CHA_date创建第三个表更改,每次用户更改表时都会有一个条目。
  • 将两者结合使用:创建表更改,但保留ART_date以更快地检索上次更改的日期。

在我看来,第三个是多余的,第一个是非常概念化的(并且只保留了最后一个变化)。即使第二个似乎仅适用于一个表(文章),但如果必须为超过30个表保存更改,我担心它会变得更复杂且非常慢 - 表示更改表将有30个外键(?!)

最好的方法是什么?你对此有何看法?

2 个答案:

答案 0 :(得分:1)

为此,MySQL有一个名为Audit Log的功能。这个想法是"审计"这是一系列数据更改事件,写入数据库外的日志文件。这样,您可以检查日志中的更改,您可以看到对同一数据的多个更改,您可以使日志到期等等。

审核日志需要插件实现才能完成其工作。 MySQL制作企业审计插件,但它不是免费的 - 您必须成为付费客户才能获得MySQL Enterprise。

审计日志插件实现也有一些免费替代方案。

您可能想尝试Percona Audit Log Plugin。这是Percona Server(MySQL Community Edition的一个分支)附带的可选插件。你只需要启用插件。

安装和配置文档:https://www.percona.com/doc/percona-server/5.7/management/audit_log_plugin.html

答案 1 :(得分:0)

你真的想知道修改文章的每个人吗?如果答案是肯定的,你必须使用第二个,我认为最好的选择是第一个(考虑到计算速度,时间),我想你只需要知道修改文章的最后一个人。