MySQL 常规查询日志:显示准备好的参数值吗?

MySQL 常规查询日志:显示准备好的参数值吗?

当我启用 MySQL 通用查询日志时,准备好的语句执行将按如下方式记录:

Execute SELECT col1, col2 FROM table1 WHERE col1 = ?

我在互联网上看到过其他信息,我认为这些信息可以让人们看到准备好的语句参数的替换值,但我根本找不到有关此信息。

我需要查看查询中使用的值,但无法在客户端执行此操作,因为它是编译代码(尽管我确实尝试告诉它连接到端口 3306,但ngrep没有显示流量,所以我想它正在使用套接字(如果可用)而且我不知道使用数据包嗅探重建准备好的查询有多么容易)。

如果我设置,long_query_time = 0慢查询日志会显示我想要的值吗?还有其他什么可能性?

答案1

设置long_query_time = 0slow_query_log = 1,重新启动 mysql 会在慢查询日志中显示查询及其实际参数值。

我不会接受这个答案,等待更好的方法让通用查询日志显示参数值。

答案2

您是否需要在开发或生产中跟踪查询?如果仅开发,您可以查看乐透. 它显示带有参数的准备好的语句。

答案3

mysql 常规日志正是您想要的。查找“执行”条目,而不是“准备”

例如这里有两行,首先您会看到带有参数变量的准备语句命令,然后您会看到用变量替换其文字值的执行语句。

Prepare SELECT `html_column_grid`.* FROM `html_column_grid` WHERE html_column_grid_html_id IN(?) ORDER BY `html_column_grid_ordering` 
Execute SELECT `html_column_grid`.* FROM `html_column_grid` WHERE html_column_grid_html_id IN('5555') ORDER BY `html_column_grid_ordering` 

这是在 mysql 5.7 上

相关内容