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

如何在MySQL中只记录原始查询?,mysql,logging,Mysql,Logging,我的日志文件正常工作,但我在每一行上都会得到一些无关的信息,比如“29 Query”,我说不出来,但看起来记录的查询是MySQL如何在内部处理每个查询的解释。有没有一种方法可以在应用程序执行每个查询时自动记录它们,而无需MySQL向日志中添加任何附加信息?谢谢 编辑: 作为悬赏的一部分,让我解释一下我的情况。我们正在使用Magento Commerce,它有一个EAV数据库体系结构。追踪任何东西,以及它的存储位置绝对是一场噩梦。我的想法是在应用程序的数据库中插入一个产品,然后记录在该过程中执行的

我的日志文件正常工作,但我在每一行上都会得到一些无关的信息,比如“29 Query”,我说不出来,但看起来记录的查询是MySQL如何在内部处理每个查询的解释。有没有一种方法可以在应用程序执行每个查询时自动记录它们,而无需MySQL向日志中添加任何附加信息?谢谢

编辑:

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

1.) SELECT * FROM <TABLE>;
2.) UPDATE <TABLE> SET <VALUE> = <VALUE>;
3.) ...
4.) ...
1.)从中选择*;
2.)更新集=;
3.) ...
4.) ...

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

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

cat log100.log | mysqlbinlog 
这对你有帮助吗


这里有两种解决方案——一种更简单,但需要mysql 5.1+。

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

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

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

log=/var/log/mysqldquery.log
上述操作将把所有查询记录到日志文件中

在my.cnf文件中进行更改后,不要忘记重新启动mysql服务

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

在基于*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`

即使使用mysqlbinlog和--short-form选项,我仍然会收到一堆垃圾。没有选择记录在bin日志中(除非是insert…select),我在magento上做了很多工作。如果你有更具体的问题,我可以试着告诉你数据在哪里!您使用的是哪个版本的MySQL?有一种简洁的方法只适用于5.1及更高版本,如果你坚持使用5.0或更高版本,我宁愿避免花时间写出来,这样对你没有帮助。我宁愿替换grep:sed's/^.{x}/'后面的前x个字符
  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`