1

我面临记录 LAMP(Debian/PHP/MySQL)站点的数据库活动的问题。

这很复杂,因为我希望每个查询都记录在用户启动它们的上下文中,比如知道“谁做了什么”。我承认对 MySQL 的日志记录功能不太了解,但我在查找有关我的特定场景的信息时遇到了问题。

现在我们已经实现了一个mysql_query()替换(我知道,我知道,使用 PDO 和准备好的语句重写代码!),它执行查询并将其记录INSERT DELAYED在日志表中。

问题是,可以很容易地预测,日志表达到数百万行,其中最旧的行是毫无用处的。另一个问题是,对于每个需要的查询,都会执行两个。部分解决方案是不记录SELECTs。

另一种解决方案是使用精美的日志轮换和 gzipping 等内容登录文本文件。但是如何知道运行查询的用户上下文呢?

是否有人实现了一个成功的查询记录器,该记录器还记录已登录的用户并且具有性能意识?

4

1 回答 1

2

好吧,这是一个权衡。如果要记录用户活动,它将占用大量空间,并使用更多处理。

我个人记录所有对 PHP 文件的 HTTP 请求(包括 GET、POST、COOKIE 等),而不是 SQL 查询。但这仍然会导致数百万行。我也永远保留它们,因为硬盘空间通常很便宜。当我需要进行审计时,它可能会很慢,但我不需要经常审计。

写入文件只会使分析变得更加困难,并且您仍将在每个请求中处理额外的 IO。

如果空间是一个问题,您可以运行一个 cron 作业来删除所有早于 X 时间量的行。

于 2012-06-29T14:29:06.210 回答