strace
查看实时 MySQL/MariaDB 查询的最快方法是使用调试器。在 Linux 上可以使用strace,例如:
sudo strace -e trace=read,write -s 2000 -fp $(pgrep -nf mysql) 2>&1
由于有很多转义字符,您可以通过 piping 将format strace's output (只需在这两个单行之间添加|)到以下命令中:
grep --line-buffered -o '".\+[^"]"' | grep --line-buffered -o '[^"]*[^"]' | while read -r line; do printf "%b" $line; done | tr "\r\n" "\275\276" | tr -d "[:cntrl:]" | tr "\275\276" "\r\n"
因此,您应该会看到相当干净的 SQL 查询,无需接触配置文件。
显然这不会取代启用日志的标准方式,如下所述(涉及重新加载 SQL 服务器)。
dtrace
使用 MySQL 探针查看实时 MySQL 查询,而无需接触服务器。示例脚本:
#!/usr/sbin/dtrace -q
pid$target::*mysql_parse*:entry /* This probe is fired when the execution enters mysql_parse */
{
printf("Query: %s\n", copyinstr(arg1));
}
将上述脚本保存到文件(如watch.d),然后运行:
pfexec dtrace -s watch.d -p $(pgrep -x mysqld)
了解更多:Getting started with DTracing MySQL
吉布斯 MySQL 望远镜
看到这个answer。
日志
以下是对开发建议有用的步骤。
将这些行添加到您的~/.my.cnf 或全局my.cnf:
[mysqld]
general_log=1
general_log_file=/tmp/mysqld.log
路径:/var/log/mysqld.log 或 /usr/local/var/log/mysqld.log 也可能根据您的文件权限起作用。
然后重启您的 MySQL/MariaDB(如有必要,使用 sudo 前缀):
killall -HUP mysqld
然后检查您的日志:
tail -f /tmp/mysqld.log
完成后,将general_log更改为0(以便以后使用),然后删除文件并重新启动SQL Server:killall -HUP mysqld。