如何在我的Linux服务器上跟踪MySQL查询?
例如,我想要设置某种侦听器,然后请求一个web页面并查看引擎执行的所有查询,或者只是查看在生产服务器上运行的所有查询。我该怎么做呢?
如何在我的Linux服务器上跟踪MySQL查询?
例如,我想要设置某种侦听器,然后请求一个web页面并查看引擎执行的所有查询,或者只是查看在生产服务器上运行的所有查询。我该怎么做呢?
当前回答
Gibbs MySQL Spyglass
AgilData最近推出了Gibbs MySQL可伸缩性顾问(一个免费的自助服务工具),它允许用户捕获实时查询流并上传到Gibbs。Spyglass(它是开源的)将监视MySQL服务器和客户端应用程序之间的交互。不需要重新配置或重新启动MySQL数据库服务器(无论是客户端还是应用程序)。
GitHub: AgilData / gibbs-mysql-spyglass
了解更多:包捕获MySQL与Rust
安装命令:
curl -s https://raw.githubusercontent.com/AgilData/gibbs-mysql-spyglass/master/install.sh | bash
其他回答
Gibbs MySQL Spyglass
AgilData最近推出了Gibbs MySQL可伸缩性顾问(一个免费的自助服务工具),它允许用户捕获实时查询流并上传到Gibbs。Spyglass(它是开源的)将监视MySQL服务器和客户端应用程序之间的交互。不需要重新配置或重新启动MySQL数据库服务器(无论是客户端还是应用程序)。
GitHub: AgilData / gibbs-mysql-spyglass
了解更多:包捕获MySQL与Rust
安装命令:
curl -s https://raw.githubusercontent.com/AgilData/gibbs-mysql-spyglass/master/install.sh | bash
看看mtop。
尽管答案已经被接受,但我想提出一个可能是最简单的选择:
$ mysqladmin -u bob -p -i 1 processlist
这将每秒钟在屏幕上打印当前查询。
-u执行命令的mysql用户名 -p提示输入你的密码(这样你就不必把它保存在一个文件中或让命令出现在你的命令历史中) i以秒为单位的间隔。 使用——verbose标志显示完整的进程列表,显示每个进程的整个查询。(谢谢,nmat)
这可能有一个缺点:如果快速查询在您设置的时间间隔之间运行,则可能不会显示。IE:我的间隔设置为1秒,如果有一个查询需要0.02秒才能运行,并且在间隔之间运行,您将看不到它。
当您希望快速检查正在运行的查询而无需设置侦听器或其他任何东西时,最好使用此选项。
运行这个方便的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
除了前面描述如何启用一般日志记录的答案之外,在将任何SQL写入日志之前,我必须在我的香草MySql 5.6安装中修改一个额外的变量:
SET GLOBAL log_output = 'FILE';
默认设置为“NONE”。