【问题标题】:Query logging scenarios in query-heavy website查询量大的网站中的查询日志场景
【发布时间】:2012-06-29 14:08:51
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 记录mysql进程列表对你有用吗?

标签: php mysql logging lamp


【解决方案1】:

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

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

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

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

【讨论】:

  • 真正的问题是,你在用日志做什么?可以使用请求的脚本页面的 POST 和 GET 数据生成查询,如果您跟踪人们在做什么,那么这将是理想的。通过 SQL 跟踪用户很困难。如果要备份数据库,请使用二进制日志文件dev.mysql.com/doc/refman/5.0/en/binary-log.html
猜你喜欢
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 2013-05-22
相关资源
最近更新 更多