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