如何在MySQL中仅记录原始查询?

时间:2009-07-03 01:26:42

标签: mysql logging

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

编辑:

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

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

简单的东西告诉我执行了什么,这样我就不必通过控制器和模型筛选试图获得所有这些。我不需要日期,时间,行号或任何其他内容。

4 个答案:

答案 0 :(得分:9)

要启用完整日志查询,请将以下内容添加到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`

答案 1 :(得分:4)

您可以使用mysql查询日志文件。启动mysql时添加此参数:

--log=/var/log/mysqld.log

答案 2 :(得分:1)

如果您指的是二进制日志,则需要使用mysqlbinlog传递它以获得有意义的输出。

cat log100.log | mysqlbinlog 

答案 3 :(得分:1)

这对你有什么帮助吗?

http://www.bigdbahead.com/?p=99

那里有2个解决方案 - 一个更容易,但需要mysql 5.1 +。