mysql - 如何在 MySQL 中只记录原始查询?

标签 mysql logging

我的日志文件在工作,但我在每一行都得到了无关信息,例如“29 查询”,我无法分辨,但看起来记录的查询是对 MySQL 在内部如何处理每个查询的解释。有没有一种方法可以在应用程序执行每个查询时自动记录它们,而无需 MySQL 在日志中添加任何其他信息?谢谢!

编辑:

作为提供赏金的一部分,让我解释一下我的情况。我们正在使用具有 EAV 数据库架构的 Magento Commerce。追踪任何东西及其存储位置绝对是一场噩梦。我的想法是将产品插入应用程序的数据库中,然后记录在该过程中执行的每个查询。这很有效,但是日志在查询周围有很多其他问题。我真的只是想要这样的东西:

1.) SELECT * FROM <TABLE>;
2.) UPDATE <TABLE> SET <VALUE> = <VALUE>;
3.) ...
4.) ...

一些简单的东西告诉我执行了什么,这样我就不必筛选 Controller 和模型来尝试获取所有这些。我不需要日期、时间、行号或任何额外的东西。

最佳答案

要启用完整的日志查询,请将以下内容添加到您的 my.cnf:

log=/var/log/mysqldquery.log

上面的代码会将所有查询记录到日志文件中。

修改my.cnf文件后不要忘记重启mysql服务。

通过 SequelPro(mac 客户端)的操作输出示例:

090721 11:06:45      51 Query       ALTER TABLE `test` ADD `name` varchar(10) DEFAULT NULL
                     51 Query       SHOW COLUMNS FROM `test`
                     51 Query       SHOW INDEX FROM `test`
090721 11:06:57      51 Query       SHOW COLUMNS FROM `test`
                     51 Query       UPDATE `test` SET `id`='1', `name`='test' WHERE `id` = '1' AND `name` IS NULL LIMIT 1
                     51 Query       SELECT * FROM `test` LIMIT 0,100
                     51 Query       SELECT COUNT(1) FROM `test`   
090721 11:07:00      51 Query       UPDATE `test` SET `id`='2', `name`='test' WHERE `id` = '2' AND `name` IS NULL LIMIT 1
                     51 Query       SELECT * FROM `test` LIMIT 0,100
                     51 Query       SELECT COUNT(1) FROM `test`

在基于 *NIX 的系统上,您可以使用 grep 启动

grep 'SELECT\|INSERT\|UPDATE' querylog.log

或者变得更棘手,开始做这样的事情:

grep 'SELECT\|INSERT\|UPDATE' querylog.log | awk '{$1="";$2="";print}'

这会给你这样的东西,不完美但更接近:

  51 Query UPDATE `test` SET `id`='2', `name`='test' WHERE `id` = '2' AND `name` IS NULL LIMIT 1
  SELECT * FROM `test` LIMIT 0,100
  SELECT COUNT(1) FROM `test`
  51 Query INSERT INTO `test` (`id`,`name`) VALUES ('3','testing')
  SELECT * FROM `test` LIMIT 0,100
  SELECT COUNT(1) FROM `test`

关于mysql - 如何在 MySQL 中只记录原始查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1077445/

相关文章:

mysql - 如何添加和比较子查询的结果

c# - 使用 CorrelationManager 链接多个 TraceSource 事件

python - 日志记录机制的差异 : API and application(python)

MYSQL:如何更新多个表中的uuid

mysql - 查询表中的所有数据,仅连接连接表中的最新记录

mysql - SQL 在按 column1 分组后更新 column3 并比较 column2 中的值

java - 通过 Try 和 Catch block 检查字符串和 Null 异常

logging - Elasticsearch 索引比它索引的日志的实际大小大得多?

logging - Quartz 一直将它的日志放在我所有的日志文件中

mysql - 在 MEGA 上同步 MAMP MySQL 数据库