如何识别mysql日志上的学说查询?

时间:2016-02-02 01:13:34

标签: php mysql doctrine-orm symfony

如何在MySQL日志(慢速日志,进程列表等)中识别使用Query Builder和DQL调用或执行使用Doctrine创建的查询的函数/方法?该项目正在Symfony中开发,但在perl和PHP中还有其他部分没有symfony。

在我们项目的某些部分,例如在perl中,我们只是在查询中添加注释。例如:

SELECT /* FooScript-FooMethod */ col1, col2 FROM  TABLE t1 WHERE col1 >= '2016-01-08'

有没有办法用Doctrine做到这一点?我的意思是,我可以在Doctrine中为生成的查询添加注释,还是在查询中添加额外的信息,以便可以在学说日志之外识别它?

1 个答案:

答案 0 :(得分:0)

根据MySQL文档,有不同类型的日志可以帮助您管理MySQL服务器。根据您的情况,您需要slow query logsgeneral logs(以查看任何客户端触发的查询)。

我提到的这些类型的日志默认由MySQL禁用。要检查日志是否已启用,请运行以下查询并查看结果:

SHOW VARIABLES LIKE '%log%';

在返回的结果中搜索以下变量:

slow_query_log  
general_log 

如果这些变量的值为OFF,则表示MySQL服务器中尚未启用日志。

启用Logs的最佳方法是在MySQL配置(my.cnf)中设置这些变量,该配置可能位于/etc/my.cnf(在Linux中),此位置可能不同,具体取决于您的MySQL安装。

在配置中设置日志变量:

在config的[mysqld]部分添加以下内容:

[mysqld]
slow_query_log=ON
slow_query_log_file=/opt/mysql/stage-slow.log #path to slow logs

#General Log: Logs each  SQL query statement received from clients

general_log= ON
general_log_file=/opt/mysql/stage.log #path to general query logs

使用这些变量更新配置后,您需要启动MySQL服务才能生效。

运行service mysqld restart(仅限Linux)以重启MySQL服务。