MYSQL連接登錄過程分析

MySQL 連接登錄過程分析

在較新MYSQL版本中,默認沒有開啟線程池的功能,每個客戶連接在服務器進程中都擁有自己的線程。

臨西ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

MYSQL 連接登錄過程分析

當客戶端(應用)連接到MySQL服務器時,服務器要對其進行認證(Authenticate),認證方式基于用戶名、原始主機信息和口令。

登錄 mysql 可以通過 Unix socket 與 TCP 兩種方式登陸,

Unix socket 是實現(xiàn)進程間通信的一種方式, mysql 支持利用 Unix socket 來實現(xiàn)客戶端 - 服務端的通信,但要求客戶端和服務端在同一臺機器上。對于 unix socket 而言,同樣也是一種套接字,監(jiān)聽線程會同時監(jiān)聽 TCP socket 和 Unix socket ,接受到請求然后處理,后續(xù)的處理邏輯都是一致的,只不過底層通信方式不一樣罷了。此處具體分析 TCP 的方式。


具體過程,里面會涉及 client 與 server 的交互,并通過 tcpdump 抓包來展現(xiàn)這一過程。

MYSQL 連接握手過程

MYSQL 的遠程登錄連接是基于 TCP 的 3 次握手機制, TCP 連接建立成功后, mysql 客戶端與 mysql 服務端開始進行通訊,進行 mysql 認證過程。

(1)   服務端首先會發(fā)一個握手包到客戶端,

(2)   然后客戶端向服務端發(fā)送認證信息 ( 用戶名,密碼等 ) ,

(3)   服務端收到認證包后,會檢查用戶名與密碼是否合法,并發(fā)送包告知客戶端認證信息。如果合法,則登陸成功,否則,登陸失敗。連接報錯。

tcpdump  過程    

xx.xxx.7.102 代表客戶端,

xx.xxx.7.104 代表服務器端,

3306 是服務器的監(jiān)聽端口號。

(1). 在客戶端上打開 tcpdump 命令,監(jiān)聽與 xx.xxx.7.104   3306 端口的通信網(wǎng)絡包,命令如下:

tcpdump -S -nn -tttt -i bond0 host xx.xxx.7.104 and port 3306 and tcp -c 100
-nn 不進行端口名稱的轉換。
-tttt 在每一行中輸出由date處理的默認格式的時間戳。
-i bond0 指定監(jiān)聽的網(wǎng)絡接口
 host xx.xxx.7.104 and port 3306  監(jiān)聽xx.xxx.7.104 的3306端口的網(wǎng)絡包
-c 100 表示監(jiān)聽100包就結束
 
此處使用以下命令生成cap文件使用wireshark軟件查看,可以看到更詳細的信息,包括數(shù)據(jù)包內容。
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

登陸成功后,然后直接執(zhí)行 exit ,退出

(3) 分析 tcpdump 抓取的網(wǎng)絡包,如下:

數(shù)據(jù)包標記解析

S=SYN   發(fā)起連接標志,一般用于建立 TCP 連接

P=PUSH 傳送數(shù)據(jù)標志,一般用于傳輸數(shù)據(jù)

F=FIN   關閉連接標志,一般用于關閉 TCP 連接

ack     表示應答包

RST= RESET  異常關閉連接

. 表示沒有任何標志

MYSQL 連接登錄過程分析

1 部分是 TCP 連接建立的 3 次握手過程 :

102 (客戶端)向 104 (服務端)發(fā)起連接 ------ 》

104 (服務端)向 102 (客戶端)發(fā)起連接和應答包 ----- 》

102 (客戶端)向 104 (服務端)發(fā)起應答 ----- 》

TCP 建立連接。

  MYSQL 連接登錄過程分析

2 部分是 MYSQL 認證的過程 :

MYSQL 連接登錄過程分析

第 4 、 5 步是服務端向客戶端發(fā)送服務端的一些信息,從包內容可以看出,包含 version, 字符集等。。

MYSQL 連接登錄過程分析

真正的登錄請求是從第 6 步開始:

102 (客戶端)向 104 (服務端)發(fā)起登錄認證請求,用戶是 root------>

104 (服務端)首先在 tcp 返回應答包 , 表示 tcp 連接存在 ------ 》

接著, 104 (服務端)認證通過,返回 OK------->

登錄成功

在第 6 步發(fā)送的數(shù)據(jù)包,包含了用戶密碼這些信息的報文。

  MYSQL 連接登錄過程分析

3 部分是登陸成功后,發(fā)送基本元數(shù)據(jù)信息的過程,

102 (客戶端)向 104 (服務端)發(fā)起查詢請求 -------- 》

104 (服務端)向 102 (客戶端)返回信息 -------- 》

102 (客戶端)返回應答包 -------- 》

查詢完成。

  MYSQL 連接登錄過程分析

4 部分是斷開連接的過程

  MYSQL 連接登錄過程分析

MYSQL 監(jiān)聽及連接線程

MYSQL 監(jiān)聽基于 TCP 協(xié)議 ,在服務器的 3306 端口, MySQL 服務反復監(jiān)聽是否有客戶端發(fā)過來的請求:

MYSQL 連接登錄過程分析

當新的連接成功后,連接會話是在數(shù)據(jù)庫中創(chuàng)建一個新的前臺線程。

MYSQL 連接登錄過程分析

該前臺線程在數(shù)據(jù)庫中有自己的 id, 同時對應到 os 層面存在相應的線程號,該線程是在 mysqld 進程下。

  MYSQL 連接登錄過程分析

 

 

分享文章:MYSQL連接登錄過程分析
標題URL:http://www.muchs.cn/article14/pdhjge.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計、網(wǎng)站改版、品牌網(wǎng)站建設電子商務、建站公司外貿建站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設