Mysql 查看记录执行的sql
项目上需要对执行的sql进行优化,使用的ORM框架为JPA,在配置项开启了打印语句后,拼接的参数却没法一起携带过来
spring:
jpa:
database: mysql
show-sql: true
use_sql_comments: true
后台打印输出如下
这种带有参数占位符的SQL不方便直接执行,需要先获取对应位置的参数然后手动替换占位符的参数,为了更好直观的看到效果,显然是输出拼接好参数的SQL 更为方便,一番搜索后,大失所望目前没有什么很优雅方便的实现,要么修改日志参数,新增jar包依赖日志打印,要么依赖第三方框架如P6spy。
为了达到即时查看执行的完整sql的目的,几番碰壁后就把目光对准了mysql本身,用mysql自带的日志记录功能来查看它刚收到的sql是什么样的,设置如下
-- 设置执行日志输出以表的形式记录
set global log_output = 'TABLE';
-- 开启执行日志记录
set global general_log = 'ON';
-- 这里是查询时间倒叙,过滤条件为博主的ip ,可换成自己的过滤条件
select *from mysql.general_log where argument like '%select%' and user_host='root[root] @ [192.168.251.29]'
order by event_time desc;
-- 最后查完后 不用这个功能了 记得关掉 并清除掉日志
set global general_log = 'OFF';
truncate mysql.general_log;
附带一提,如果使用的连接工具是sqlyog,是可以直接查看日志里过滤出来的blob文本的,如果是navicat 是不能直接查看的,需要对着字段点击文本才行,如下图所示,我们开启日志输出执行语句后,看到了刚才执行的拼接好参数的语句
而且博主这里是测试库,所以可以直接操作数据库,所以不能操作数据库的情况下想查看完整的SQL语句,需要靠其它方案实现,这里附录一下。
传送门:
日志打印sql 实现https://blog.csdn.net/qq_35387940/article/details/102561244
P6spy实现
https://www.cnblogs.com/baby123/p/12610750.html