MYSQL 連線登入過程分析
MYSQL 連線登入過程分析
在較新MYSQL版本中,預設沒有開啟執行緒池的功能,每個客戶連線在伺服器程式中都擁有自己的執行緒。
當客戶端(應用)連線到MySQL伺服器時,伺服器要對其進行認證(Authenticate),認證方式基於使用者名稱、原始主機資訊和口令。
登入 mysql 可以通過 Unix socket 與 TCP 兩種方式登陸,
Unix socket 是實現程式間通訊的一種方式, mysql 支援利用 Unix socket 來實現客戶端 - 服務端的通訊,但要求客戶端和服務端在同一臺機器上。對於 unix socket 而言,同樣也是一種套接字,監聽執行緒會同時監聽 TCP socket 和 Unix socket ,接受到請求然後處理,後續的處理邏輯都是一致的,只不過底層通訊方式不一樣罷了。此處具體分析 TCP 的方式。
具體過程,裡面會涉及
client
與
server
的互動,並通過
tcpdump
抓包來展現這一過程。
MYSQL 連線握手過程
MYSQL 的遠端登入連線是基於 TCP 的 3 次握手機制, TCP 連線建立成功後, mysql 客戶端與 mysql 服務端開始進行通訊,進行 mysql 認證過程。
(1) 服務端首先會發一個握手包到客戶端,
(2) 然後客戶端向服務端傳送認證資訊 ( 使用者名稱,密碼等 ) ,
(3) 服務端收到認證包後,會檢查使用者名稱與密碼是否合法,併傳送包告知客戶端認證資訊。如果合法,則登陸成功,否則,登陸失敗。連線報錯。
tcpdump 過程
xx.xxx.7.102 代表客戶端,
xx.xxx.7.104 代表伺服器端,
3306 是伺服器的監聽埠號。
(1). 在客戶端上開啟 tcpdump 命令,監聽與 xx.xxx.7.104 3306 埠的通訊網路包,命令如下:
tcpdump -S -nn -tttt -i bond0 host xx.xxx.7.104 and port 3306 and tcp -c 100
-nn 不進行埠名稱的轉換。
-tttt 在每一行中輸出由date處理的預設格式的時間戳。
-i bond0 指定監聽的網路介面
host xx.xxx.7.104 and port 3306 監聽xx.xxx.7.104 的3306埠的網路包
-c 100 表示監聽100包就結束
此處使用以下命令生成cap檔案使用wireshark軟體檢視,可以看到更詳細的資訊,包括資料包內容。
tcpdump -i bond0 host xx.xxx.7.104 and port 3306 -w /tmp/1.cap --生成cap檔案
(2). 在客戶端上,利用 mysql 命令遠端連線服務端 xx.xxx.7.104 ,
mysql –hxx.xxx.7.104 –P3306 –uxxx –pxxx
登陸成功後,然後直接執行 exit ,退出
(3) 分析 tcpdump 抓取的網路包,如下:
資料包標記解析
S=SYN 發起連線標誌,一般用於建立 TCP 連線
P=PUSH 傳送資料標誌,一般用於傳輸資料
F=FIN 關閉連線標誌,一般用於關閉 TCP 連線
ack 表示應答包
RST= RESET 異常關閉連線
. 表示沒有任何標誌
第 1 部分是 TCP 連線建立的 3 次握手過程 :
102 (客戶端)向 104 (服務端)發起連線 ------ 》
104 (服務端)向 102 (客戶端)發起連線和應答包 ----- 》
102 (客戶端)向 104 (服務端)發起應答 ----- 》
TCP 建立連線。
第 2 部分是 MYSQL 認證的過程 :
第 4 、 5 步是服務端向客戶端傳送服務端的一些資訊,從包內容可以看出,包含 version, 字符集等。。
真正的登入請求是從第 6 步開始:
102 (客戶端)向 104 (服務端)發起登入認證請求,使用者是 root------>
104 (服務端)首先在 tcp 返回應答包 , 表示 tcp 連線存在 ------ 》
接著, 104 (服務端)認證通過,返回 OK------->
登入成功
在第 6 步傳送的資料包,包含了使用者密碼這些資訊的報文。
第 3 部分是登陸成功後,傳送基本後設資料資訊的過程,
102 (客戶端)向 104 (服務端)發起查詢請求 -------- 》
104 (服務端)向 102 (客戶端)返回資訊 -------- 》
102 (客戶端)返回應答包 -------- 》
查詢完成。
第 4 部分是斷開連線的過程
MYSQL 監聽及連線執行緒
MYSQL 監聽基於 TCP 協議 ,在伺服器的 3306 埠, MySQL 服務反覆監聽是否有客戶端發過來的請求:
當新的連線成功後,連線會話是在資料庫中建立一個新的前臺執行緒。
該前臺執行緒在資料庫中有自己的 id, 同時對應到 os 層面存在相應的執行緒號,該執行緒是在 mysqld 程式下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29863023/viewspace-2216731/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 輸入密碼連線過程log密碼
- MySQL伺服器連線過程淺析MySql伺服器
- 掃二維碼登入過程
- 通過跳板機連線MySQLMySql
- 簡述Socket連線的過程
- Socket和TCP連線過程解析TCP
- 資料庫的連線過程資料庫
- MySQL 崩潰恢復過程分析MySql
- 【解決方案】- phpmyadmin連線mysql時登入不了,提示mysqli_real_connect()PHPMySql
- [Oracle-> MySQL] Oracle通過dblink連線MySQL--Oracle 19c連線到MySQL 5.7OracleMySql
- 基於 swoole 協程的 MySQL 連線池MySql
- Python + Tkinter簡單實現註冊登入(連線本地MySQL資料庫)PythonMySql資料庫
- ubuntu系統安裝mysql並支援遠端連線的詳細過程UbuntuMySql
- 【圖片+程式碼】:GCC 連結過程中的【重定位】過程分析GC
- MySQL資料寫入過程介紹MySql
- WebForm登入頁面(連線資料庫)WebORM資料庫
- HTTPS連線建立過程(單向&雙向)HTTP
- keycloak~關於社群登入的過程說明
- SAP Commerce Cloud ASM 模組的登入過程CloudASM
- MySQL-09-mysql 儲存過程入門介紹MySql儲存過程
- Android fragment 標籤載入過程分析AndroidFragment
- vscode 遠端連線設定免密登入VSCode
- [MySQL光速入門]015 聊聊儲存過程MySql儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- 通過驅動建立與MySQL的連線MySql
- 簡單的登入註冊(前端+後端+MySQL資料庫 DRuid連線池 DBUtils)前端後端MySql資料庫UI
- ssh免密登入和代理連線線上伺服器伺服器
- [轉帖]效能分析之TCP全連線佇列佔滿問題分析及最佳化過程TCP佇列
- 【由淺入深學MySQL】- MySQL連線查詢詳解MySql
- 群裡的一個惡意連結分析過程
- 認證授權:一鍵登入的背後過程
- JWT登入鑑權:避免在使用者操作的過程中JWT到期跳轉登入JWT
- Python 連線 MySQLPythonMySql
- python連線MySQLPythonMySql
- IDEA連線MySQLIdeaMySql
- GO 連線 MySQLGoMySql
- C連線MySQLMySql
- JDBC連線mysqlJDBCMySql