如何启用MySQL的查询日志(查看所有SQL查询)

开发使用MySQL的应用程序时,实时查看正在进行的请求可以非常有用。
如何查看所有传入的MySQL查询?
3个回答

作为root用户,编辑/etc/mysql/my.cnf文件,并在底部添加以下段落:
[mysqld]
general_log=on
general_log_file=/var/log/mysql/query.log

还是以root身份运行以下命令:
service mysql stop
service mysql start

然后观察日志:
tail -f /var/log/mysql/query.log

请注意,这个设置会使MySQL变慢约15%,所以当您不再需要它时,请删除或注释该段落(然后重新启动)。

停止mysql服务时要求输入密码,我有一个无需密码的解决方案。尝试执行以下命令:sudo /etc/init.d/mysql stop 然后再执行 sudo /etc/init.d/mysql start。这样可以绕过密码提示。 - Shurvir Mori

尽管Nicolas Raoul的回答很准确,但请注意从mysql-server-5.7版本开始,/etc/mysql/my.cnf文件是由/etc/mysql/conf.d/etc/mysql/mysqld.conf.d中的配置文件构建而成。
因此,为了使解决方案起作用,需要修改/etc/mysql/mysqld.conf.d/mysqld.cnf这个文件。所以,以下这些行:
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1

必须取消注释,保存文件,并使用sudo service mysql restart重新启动服务。

否则,可能会出现错误。


使用Linux shell脚本运行以下命令:
mysqladmin -uroot -p'mysql_password' -i 2 processlist
这将生成进程列表,并在每分钟自动刷新。

2请问您能否提供一个样本输出,以便查看其外观?谢谢 :-) - Nicolas Raoul