开发使用的是测试服务器 但经常有查看实际执行的sql的需求 如
查看某一服务端接口涉及到哪些sql操作
定位问题 测试反映页面查询不到结果 看一下实际的sql中是否包含了什么隐式的查询条件 如
is_publish=1
验证orm框架实际有没发出查询请求, 还是使用了本地的缓存。
等等
有没工具可以监控本地发出的sql呢? 就像使用Charles
等工具可以清楚的查看Http请求和响应一样。搜索了一下还真有这样的工具 如下所示
# 在终端一中执行下面的命令
tshark -i en0 -d tcp.port==3306,mysql -T fields -e mysql.query 'port 3306'
Capturing on 'Wi-Fi'
另一终端连接测试服务器并执行几条查询命令 可以看到终端一中有对应的sql输出
select version()
select now()
美中不足的是会有一些多余的空行输出。 目前还不知有什么办法可以去掉空行。
另外使用上面的命令监控发给本机服务器的query sql失败, 不知是不是版本的原因。 本机使用的是5.7.12
。
#终端一
tshark -i lo -d tcp.port==3306,mysql -T fields -e mysql.query 'port 3306'
Capturing on 'Loopback'
#终端二
mysql -h127.0.0.1 -u root -p
select version();
select now();
show databases;
# 终端一中除了空行外无任何输出? 是mysql版本原因吗? 本地用的是5.7.12
参考文档
https://www.linuxsysadmintutorials.com/how-to-sniff-mysql-traffic-on-a-database-server.html