我的日志文件工作正常,但我在每一行都得到了无关的信息,如"29 Query",我无法分辨,但看起来记录的查询是MySQL如何在内部处理每个查询的解释.有没有办法在应用程序执行时自动记录每个查询,而MySQL没有任何其他信息添加到日志中?谢谢!
编辑:
作为提供赏金的一部分,让我解释一下我的情况.我们正在使用具有EAV数据库架构的Magento Commerce.跟踪任何内容以及存储位置绝对是一场噩梦.我的想法是将产品插入应用程序中的数据库,然后记录在该过程中执行的每个查询.这很好用,但是日志在查询周围还有很多其他问题.我真的只想要这样的东西:
1.) SELECT * FROM <TABLE>;
2.) UPDATE <TABLE> SET <VALUE> = <VALUE>;
3.) ...
4.) ...
Run Code Online (Sandbox Code Playgroud)
简单的东西告诉我执行了什么,这样我就不必通过控制器和模型来筛选试图获得所有这些.我不需要日期,时间,行号或任何额外的东西.
要启用完整日志查询,请将以下内容添加到my.cnf:
log=/var/log/mysqldquery.log
Run Code Online (Sandbox Code Playgroud)
以上将记录所有查询到日志文件.
在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`
Run Code Online (Sandbox Code Playgroud)
在基于*NIX的系统上,您可以使用grep启动
grep 'SELECT\|INSERT\|UPDATE' querylog.log
Run Code Online (Sandbox Code Playgroud)
或者变得更加棘手并开始做以下事情:
grep 'SELECT\|INSERT\|UPDATE' querylog.log | awk '{$1="";$2="";print}'
Run Code Online (Sandbox Code Playgroud)
这会给你这样的东西,不完美但更接近:
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`
Run Code Online (Sandbox Code Playgroud)