问题
对于一个给定的 MySQL 连接,我们如何才能知道它来自于哪个客户端的哪个进程呢?
HandshakeResponse
MySQL-Client 在连接 MySQL-Server 的时候,不只会把用户名密码发送到服务端,还会把当前进程id,操作系统名,主机名等等信息也发到服务端。这个数据包就叫 HandshakeResponse 官方有对其格式进行详细的说明。
我自己改了一个连接驱动,用这个驱动可以看到连接时发送了哪些信息。
?
HandshakeResponse 包的字节格式如下,要传输的数据就在包的最后部分。
?
解决方案
从前面的内容我们可以知道 MySQL-Client 确实向 MySQL-Server 发送了当前的进程 id ,这为解决问题提供了最基本的可能性。当服务端收到这些信息后双把它们保存到了 performance_schema.session_connect_attrs。
第一步通过 information_schema.processlist 查询关心的连接,它来自于哪个 IP,和它的 processlist_id 。
?
第二步通过 performance_schema.session_connect_attrs 查询连接的进程 ID
?
可以看到 processlist_id = 7 的这个连接是由 172.16.192.1 的 58471 号进程发起的。
检查
我刚才是用的 ipython 连接的数据库,ps 看到的结果也正是 58471 与查询出来的结果一致。
?
以上就是MySQL 如何连接对应的客户端进程的详细内容,更多关于MySQL 连接对应的客户端进程的资料请关注服务器之家其它相关文章!
原文链接:https://www.sqlpy.com/blogs/283699273