mysql客户端怎么运行程序(MySQL 如何连接对应的客户端进程)
mysql客户端怎么运行程序
MySQL 如何连接对应的客户端进程问题
对于一个给定的 MySQL 连接,我们如何才能知道它来自于哪个客户端的哪个进程呢?
HandshakeResponse
MySQL-Client 在连接 MySQL-Server 的时候,不只会把用户名密码发送到服务端,还会把当前进程id,操作系统名,主机名等等信息也发到服务端。这个数据包就叫 HandshakeResponse 官方有对其格式进行详细的说明。
我自己改了一个连接驱动,用这个驱动可以看到连接时发送了哪些信息。
|
2020-05-19 15:31:04,976 - mysql-connector-python.mysql.connector.protocol.MySQLProtocol.make_auth - MainThread - INFO - conn-attrs { '_pid' : '58471' , '_platform' : 'x86_64' , '_source_host' : 'NEEKYJIANG-MB1' , '_client_name' : 'mysql-connector-python' , '_client_license' : 'GPL-2.0' , '_client_version' : '8.0.20' , '_os' : 'macOS-10.15.3' } |
HandshakeResponse 包的字节格式如下,要传输的数据就在包的最后部分。
|
4 capability flags, CLIENT_PROTOCOL_41 always set 4 max -packet size 1 character set string[23] reserved ( all [0]) string[NUL] username if capabilities & CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA { lenenc- int length of auth-response string[n] auth-response } else if capabilities & CLIENT_SECURE_CONNECTION { 1 length of auth-response string[n] auth-response } else { string[NUL] auth-response } if capabilities & CLIENT_CONNECT_WITH_DB { string[NUL] database } if capabilities & CLIENT_PLUGIN_AUTH { string[NUL] auth plugin name } if capabilities & CLIENT_CONNECT_ATTRS { lenenc- int length of all key - values lenenc-str key lenenc-str value if-more data in 'length of all key-values' , more keys and value pairs } |
解决方案
从前面的内容我们可以知道 MySQL-Client 确实向 MySQL-Server 发送了当前的进程 id ,这为解决问题提供了最基本的可能性。当服务端收到这些信息后双把它们保存到了 performance_schema.session_connect_attrs。
第一步通过 information_schema.processlist 查询关心的连接,它来自于哪个 IP,和它的 processlist_id 。
|
mysql> select * from information_schema.processlist; + ----+---------+--------------------+--------------------+---------+------+-----------+----------------------------------------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | + ----+---------+--------------------+--------------------+---------+------+-----------+----------------------------------------------+ | 8 | root | 127.0.0.1:57760 | performance_schema | Query | 0 | executing | select * from information_schema.processlist | | 7 | appuser | 172.16.192.1:50198 | NULL | Sleep | 2682 | | NULL | + ----+---------+--------------------+--------------------+---------+------+-----------+----------------------------------------------+ 2 rows in set (0.01 sec) |
第二步通过 performance_schema.session_connect_attrs 查询连接的进程 ID
|
mysql> select * from session_connect_attrs where processlist_id = 7; + ----------------+-----------------+------------------------+------------------+ | PROCESSLIST_ID | ATTR_NAME | ATTR_VALUE | ORDINAL_POSITION | + ----------------+-----------------+------------------------+------------------+ | 7 | _pid | 58471 | 0 | | 7 | _platform | x86_64 | 1 | | 7 | _source_host | NEEKYJIANG-MB1 | 2 | | 7 | _client_name | mysql-connector-python | 3 | | 7 | _client_license | GPL-2.0 | 4 | | 7 | _client_version | 8.0.20 | 5 | | 7 | _os | macOS-10.15.3 | 6 | + ----------------+-----------------+------------------------+------------------+ 7 rows in set (0.00 sec) |
可以看到 processlist_id = 7 的这个连接是由 172.16.192.1 的 58471 号进程发起的。
检查
我刚才是用的 ipython 连接的数据库,ps 看到的结果也正是 58471 与查询出来的结果一致。
|
ps -ef | grep 58471 501 58471 57741 0 3:24下午 ttys001 0:03.67 /Library/Frameworks/Python.framework/Versions/3.8/Resources/Python.app/Contents/MacOS/Python /Library/Frameworks/Python.framework/Versions/3.8/bin/ipython |
以上就是MySQL 如何连接对应的客户端进程的详细内容,更多关于MySQL 连接对应的客户端进程的资料请关注开心学习网其它相关文章!
原文链接:https://www.sqlpy.com/blogs/283699273
- mysql要先下服务端再下客户端吗(解读MySQL的客户端和服务端协议)
- mysql使用步骤(聊一聊MySQL角色Role功能)
- mysql数据库出现乱码(数据库 MySQL中文乱码解决办法总结)
- 所有聚合函数mysql教程(Mysql 聚合函数嵌套使用操作)
- mysql给字段加默认值(MySQL 如何处理隐式默认值)
- mysql更新数据库表中的数据语法(Mysql联表update数据的示例详解)
- 如何正常查看mysql存储数据文件(Mysql文件存储图文详解)
- xampp数据库表在哪个文件夹(XAMPP集成环境中MySQL数据库的使用)
- mysql查询数据去除重复(MySQL 大批量插入,如何过滤掉重复数据?)
- mysql8.0配置优化参数(MySQL 8.0 新特性之检查约束的实现)
- mybatis为什么还用mysql(关于MyBatis连接MySql8.0版本的配置问题)
- mysql定时任务
- mysql索引如何使用(MySQL 索引和数据表该如何维护)
- mysql触发器语法规则(MySQL 触发器的使用及需要注意的地方)
- mysql5.7.19下载及安装教程(Apache2.2.16+PHP5.3.3+MySQL5.1.49的配置方法)
- thinkphp5.1手动连接mysql数据库(thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例)
- 这里输入关键词(请手动输入关键词)
- 小说 顾瑾岚拿出一套飞行棋,别说你连飞行棋都不会哦(顾瑾岚拿出一套飞行棋)
- 金品公司 界界乐中秋限定飞行棋礼盒 露营藤篮礼盒全新上市(界界乐中秋限定飞行棋礼盒)
- 必看 8月,相比七夕,更需要注意的是这些事(必看8月相比七夕)
- 8月23日11时16分将迎处暑,逐渐进入气象意义上的秋天(8月23日11时16分将迎处暑)
- 花不语 下 如果重来一次的话,你还会这么选择吗(花不语下如果重来一次的话)
热门推荐
- thinkphp5分页数据怎么处理(TP5thinkPHP5框架实现显示错误信息及行号功能的方法)
- docker容器基础入门认知网络篇(Docker 容器生命周期 架构 以及和VM之间的差异详解)
- 云服务器怎么设置端口(云服务器80端口是什么意思?)
- iis部署后浏览没有主界面(IIS 浏览aspx页面出现无法显示XML页的解决方法分享)
- phpcurl详解(解决PHP curl或file_get_contents下载图片损坏或无法打开的问题)
- css弹性布局设置每行显示指定个数(CSS实现多行多列的布局的实例代码)
- dedecms语法教程(dedecms 获取描述信息限制字数的语法)
- 如何搭建pxe服务器(使用vmware测试PXE批量安装服务器的详细过程)
- thinkphp静态怎么设置(浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法)
- python和mysql实战(由Python编写的MySQL管理工具代码实例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9