MySQL - 如何跟踪每个查询?

时间:2012-10-14 09:36:38

标签: php mysql logging doctrine

  

可能重复:
  How to enable MySQL Query Log?

有没有办法跟踪MySQL中的每个SQL查询?

我使用Doctrine ORM来构建实体并从数据库中获取它们,并希望看到Doctrine生成的查询。因此,当我刷新使用Doctrine ORM从网络中获取某些数据的网页时,我在哪里可以看到在数据库中执行的查询?

这可能吗?

2 个答案:

答案 0 :(得分:0)

启用MySQL的general query log

  

通用查询日志是mysqld正在执行的操作的一般记录。当客户端连接或断开连接时,服务器会将信息写入此日志,并记录从客户端收到的每个SQL语句。当您怀疑客户端中存在错误并希望确切知道客户端发送给mysqld的内容时,通用查询日志非常有用。

MySQL内部

set global general_log = 1;
set global log_output = 'table' /* so we can query it*/

select * from general_log       /* to select */

truncate general_log            /*if you got to much data*/

set global general_log = 0      /*to turn it off again*/

答案 1 :(得分:0)

如果您希望记录所有查询,请让此应用程序决定是否要记录查询并在MySQL端记录查询。

Doctrine在包中有一个内置的记录器接口和一个演示记录器。来自http://docs.doctrine-project.org/en/2.0.x/reference/configuration.html#sql-logger-optional

<?php
$config->setSQLLogger($logger);
$config->getSQLLogger();
  

获取或设置用于记录Doctrine执行的所有SQL语句的记录器。记录器类必须实现Doctrine \ DBAL \ Logging \ SQLLogger接口。可以在Doctrine \ DBAL \ Logging \ EchoSQLLogger中找到使用echo和var_dump记录到标准输出的简单默认实现。