在使用tcpdump和Maatkit工具对运行在我们数据库上的查询进行审计时,第一个查询是
RESET [int]
从MySQL命令行运行此语句会导致错误,因为RESET只应接受参数master,query cache和slave。
这个声明在我们的代码库中不存在。 我们运行MySQL企业监视器,但报告的用户不是我们的监控用户。 我们也使用Zend框架与mysqli连接驱动程序,但没有find任何调用此语句。
任何想法,这可能是什么?
我怀疑这是mk-query-digest曲解TCPstream量。 由于无序的数据包,丢包,重传等等,在场外观察者重buildstream量绝不是一门精确的科学。 当mk-query-digest看到很多错误的时候,它有时候会以虚假的方式解释这些stream量,并且会发现可能不存在的东西。
我build议手动挖掘到tcpdump输出。 这是繁琐的,协议是很难手动解码,但如果你转储一些数据到一个文件,然后mk-query-digest它,mk-query-digest会告诉你在文件中find样本的字节偏移量查询它打印出来。 这应该让你缩小一个数据包,并且使用MySQL内部手册中的协议文档,你应该能够看到这个数据包是否真的是所谓的RESET。 我相信RESET可能与二进制(准备语句)协议有关,如果是真的的话; 如果是虚假的,我没有猜测。
你正在使用tcpdump,所以你可以通过查找来自哪个工作站来缩小这个范围。 如果全是这些,那么你的假设是有问题的。
如果你用tcpdump来看它,你应该能够知道login的用户和源端口。 前者让您能够逐个更改凭证,直到有问题的查询更改他们使用的login名,此时您将知道他们的来源。 源端口可让您知道远程UID是否为零(如果src端口<1024),还可以使用netstat -ntp (* nix)或netstat -nto (Windows)来确定哪个PID是实际上正在生成查询。