校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 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 連接對應的客戶端進程的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • MySQL mysqladmin客戶端的使用簡介
  • 解決MySql客戶端秒退問題(找不到my.ini)
  • PHP Swoole異步MySQL客戶端實現方法示例
  • 解決Node.js mysql客戶端不支持認證協議引發的問題
  • mysql8.0.11客戶端無法登陸的解決方法
  • mysql/Java服務端對emoji的支持與問題解決方法詳解
  • 初識NodeJS服務端開發入門(Express+MySQL)
  • 用于App服務端的MySQL連接池(支持高并發)
  • 解讀MySQL的客戶端和服務端協議

標簽:沈陽 阿里 牡丹江 天津 惠州 合肥 公主嶺 呼和浩特

巨人網絡通訊聲明:本文標題《MySQL 如何連接對應的客戶端進程》,本文關鍵詞  MySQL,如何,連接,對應,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL 如何連接對應的客戶端進程》相關的同類信息!
  • 本頁收集關于MySQL 如何連接對應的客戶端進程的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 云安县| 手机| 龙江县| 仙游县| 抚远县| 嵊泗县| 新竹县| 彰化县| 贡嘎县| 大安市| 达州市| 舟曲县| 伊川县| 观塘区| 大关县| 长沙县| 清水河县| 东光县| 乐业县| 榆树市| 合山市| 兴安盟| 东丰县| 和平县| 张家口市| 花垣县| 无为县| 中西区| 延寿县| 古浪县| 四子王旗| 句容市| 汝阳县| 长海县| 拉孜县| 伊金霍洛旗| 无为县| 平舆县| 凯里市| 宿迁市| 蒙山县|