如何在我的Linux服务器上跟踪MySQL查询?
例如,我想要设置某种侦听器,然后请求一个web页面并查看引擎执行的所有查询,或者只是查看在生产服务器上运行的所有查询。我该怎么做呢?
如何在我的Linux服务器上跟踪MySQL查询?
例如,我想要设置某种侦听器,然后请求一个web页面并查看引擎执行的所有查询,或者只是查看在生产服务器上运行的所有查询。我该怎么做呢?
当前回答
看看mtop。
其他回答
如果你想进行监控和统计,那么有一个很好的开源工具Percona monitoring and Management
但它是一个基于服务器的系统,并且它的启动不是很简单。
并有现场演示系统进行测试。
看看mtop。
你可以在命令行中运行:
watch --interval=[your-interval-in-seconds] "mysqladmin -u root -p[your-root-pw] processlist | grep [your-db-name]"
将值[x]替换为您的值。
或者更好:
mysqladmin -u root -p -i 1 processlist;
运行这个方便的SQL查询来查看正在运行的MySQL查询。它可以在您喜欢的任何环境中运行,无需任何代码更改或开销。它可能需要一些MySQL权限配置,但对我来说,它不需要任何特殊设置就可以运行。
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND != 'Sleep';
唯一的问题是,你经常会错过执行非常快的查询,所以它对运行时间较长的查询或MySQL服务器有正在备份的查询时最有用——以我的经验,这正是我想要查看“活动”查询的时候。
您还可以添加条件,使其更特定于任何SQL查询。
显示所有运行5秒或更长时间的查询:
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND != 'Sleep' AND TIME >= 5;
显示所有正在运行的更新:
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND != 'Sleep' AND INFO LIKE '%UPDATE %';
详情见:http://dev.mysql.com/doc/refman/5.1/en/processlist-table.html
你可以很容易地将每个查询记录到日志文件中:
mysql> SHOW VARIABLES LIKE "general_log%";
+------------------+----------------------------+
| Variable_name | Value |
+------------------+----------------------------+
| general_log | OFF |
| general_log_file | /var/run/mysqld/mysqld.log |
+------------------+----------------------------+
mysql> SET GLOBAL general_log = 'ON';
执行查询(在任何db上)。查看/var/run/mysqld/mysqld.log
那就别忘了
mysql> SET GLOBAL general_log = 'OFF';
否则,性能将急剧下降,磁盘将被填满!