当我启用 MySQL 通用查询日志时,准备好的语句执行将按如下方式记录:
Execute SELECT col1, col2 FROM table1 WHERE col1 = ?
我在互联网上看到过其他信息,我认为这些信息可以让人们看到准备好的语句参数的替换值,但我根本找不到有关此信息。
我需要查看查询中使用的值,但无法在客户端执行此操作,因为它是编译代码(尽管我确实尝试告诉它连接到端口 3306,但ngrep
没有显示流量,所以我想它正在使用套接字(如果可用)而且我不知道使用数据包嗅探重建准备好的查询有多么容易)。
如果我设置,long_query_time = 0
慢查询日志会显示我想要的值吗?还有其他什么可能性?
答案1
设置long_query_time = 0
和slow_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 上