使用tshark捕捉本机发出的sql命令

569 查看

开发使用的是测试服务器 但经常有查看实际执行的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