我管理一个数据库,每天都会创建数千 GB 的无用日志数据。
我无法修复执行所有这些(不必要的)日志记录的软件。有没有办法锁定(或禁用写入)此日志表,使其永远不会被写入,但同时它会报告写入成功,因此不会导致软件出现问题?
我知道我可以用 cronjob 截断表,但我想知道是否有更好的方法?
我管理一个数据库,每天都会创建数千 GB 的无用日志数据。
我无法修复执行所有这些(不必要的)日志记录的软件。有没有办法锁定(或禁用写入)此日志表,使其永远不会被写入,但同时它会报告写入成功,因此不会导致软件出现问题?
我知道我可以用 cronjob 截断表,但我想知道是否有更好的方法?
MySQL和朋友,即MariaDB和Percona,有一个相当不寻常的存储机制,称为黑洞引擎- 它可能有助于您的特定请求(请参阅此处的小提琴)。
例如,如果您这样做:
无论如何,默认引擎是
InnoDB
,但为了清楚起见,我只是在这里明确。然后,我们输入几条记录:
那里没有问题!然后,检查我们:
花园里一切都是美好的!
现在,有趣的部分!
好的。我们继续
INSERT
对数据进行如下处理:再一次,一切都很好,花花公子。数据库很高兴,我们很高兴,最重要的是,第三方软件很高兴并且对环境的任何变化一无所知!
但!!!现在,当我们这样做时:
纳达!齐尔奇!瑞恩!没...
我们的数据已经遇到了黑洞的视界,没有任何东西可以逃脱!您可以根据需要放入尽可能多的数据 - 这就像
/dev/null
在 *nix 中发送文件!您问:
现在你有(见上文)外表正常的行为
INSERT
:所以,我们是金!出于所有意图和目的,发送到服务器的数据被忠实地存储,但事实并非如此!
对于编写这些日志的软件来说,似乎一切都是笨拙的,但没有任何内容被写入——这真的很漂亮。
这看起来好像是根据您的要求制作的。在 MariaDB 中,您需要按照此处的说明加载插件,但这似乎很简单。从这里:
只是一个警告!我不知道您的软件是什么将所有这些日志数据写入服务器,但有人,某处,有时认为它值得保存。只要确保你没有把婴儿和洗澡水一起扔出去!
此外,如果您有这个讨厌的软件的支持合同,您可能想检查一下您是否可能通过这样做使该联系人无效?
最后一点,如果你在黑洞表上尝试这样的事情:
结果:
因此,即使错误是真实的,如果出现错误,您的软件也会按预期运行,并且如果发生这种情况,您的软件将继续(所有外观)正常运行。
您会注意到小提琴适用于 MySQL 8 而不是 MariaDB。使用 MariaDB(在这个小提琴上),如果我尝试运行,我会收到权限被拒绝错误
我收到消息:
这是意料之中的——来自 MariaDB 链接:
尝试更改引擎类型和安装插件都失败了(在面向公众的服务器上几乎不令人惊讶)。
给出: