【问题标题】:MySQL - How to track every query? [duplicate]MySQL - 如何跟踪每个查询? [复制]
【发布时间】:2012-10-04 13:29:45
【问题描述】:

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

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

我正在使用 Doctrine ORM 构建实体并从数据库中获取它们,并且想看看 Doctrine 产生了哪些查询。那么当我刷新一个使用 Doctrine ORM 从数据库中获取一些数据的网页时,我在哪里可以看到在数据库中执行的查询?

这可能吗?

【问题讨论】:

  • 这不会告诉我们查询属于哪个 HTTP 请求。

标签: php mysql logging doctrine


【解决方案1】:

启用 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*/

【讨论】:

    【解决方案2】:

    让这个应用程序决定是否要记录查询,如果要记录所有查询,请在 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 记录到标准输出的简单默认实现。`

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      相关资源
      最近更新 更多