在較新MYSQL版本中,默認(rèn)沒有開啟線程池的功能,每個(gè)客戶連接在服務(wù)器進(jìn)程中都擁有自己的線程。
臨西ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
當(dāng)客戶端(應(yīng)用)連接到MySQL服務(wù)器時(shí),服務(wù)器要對(duì)其進(jìn)行認(rèn)證(Authenticate),認(rèn)證方式基于用戶名、原始主機(jī)信息和口令。
登錄 mysql 可以通過 Unix socket 與 TCP 兩種方式登陸,
Unix socket 是實(shí)現(xiàn)進(jìn)程間通信的一種方式, mysql 支持利用 Unix socket 來實(shí)現(xiàn)客戶端 - 服務(wù)端的通信,但要求客戶端和服務(wù)端在同一臺(tái)機(jī)器上。對(duì)于 unix socket 而言,同樣也是一種套接字,監(jiān)聽線程會(huì)同時(shí)監(jiān)聽 TCP socket 和 Unix socket ,接受到請(qǐng)求然后處理,后續(xù)的處理邏輯都是一致的,只不過底層通信方式不一樣罷了。此處具體分析 TCP 的方式。
具體過程,里面會(huì)涉及
client
與
server
的交互,并通過
tcpdump
抓包來展現(xiàn)這一過程。
MYSQL 連接握手過程
MYSQL 的遠(yuǎn)程登錄連接是基于 TCP 的 3 次握手機(jī)制, TCP 連接建立成功后, mysql 客戶端與 mysql 服務(wù)端開始進(jìn)行通訊,進(jìn)行 mysql 認(rèn)證過程。
(1) 服務(wù)端首先會(huì)發(fā)一個(gè)握手包到客戶端,
(2) 然后客戶端向服務(wù)端發(fā)送認(rèn)證信息 ( 用戶名,密碼等 ) ,
(3) 服務(wù)端收到認(rèn)證包后,會(huì)檢查用戶名與密碼是否合法,并發(fā)送包告知客戶端認(rèn)證信息。如果合法,則登陸成功,否則,登陸失敗。連接報(bào)錯(cuò)。
tcpdump 過程
xx.xxx.7.102 代表客戶端,
xx.xxx.7.104 代表服務(wù)器端,
3306 是服務(wù)器的監(jiān)聽端口號(hào)。
(1). 在客戶端上打開 tcpdump 命令,監(jiān)聽與 xx.xxx.7.104 3306 端口的通信網(wǎng)絡(luò)包,命令如下:
tcpdump -S -nn -tttt -i bond0 host xx.xxx.7.104 and port 3306 and tcp -c 100
-nn 不進(jìn)行端口名稱的轉(zhuǎn)換。
-tttt 在每一行中輸出由date處理的默認(rèn)格式的時(shí)間戳。
-i bond0 指定監(jiān)聽的網(wǎng)絡(luò)接口
host xx.xxx.7.104 and port 3306 監(jiān)聽xx.xxx.7.104 的3306端口的網(wǎng)絡(luò)包
-c 100 表示監(jiān)聽100包就結(jié)束
此處使用以下命令生成cap文件使用wireshark軟件查看,可以看到更詳細(xì)的信息,包括數(shù)據(jù)包內(nèi)容。
tcpdump -i bond0 host xx.xxx.7.104 and port 3306 -w /tmp/1.cap --生成cap文件
(2). 在客戶端上,利用 mysql 命令遠(yuǎn)程連接服務(wù)端 xx.xxx.7.104 ,
mysql –hxx.xxx.7.104 –P3306 –uxxx –pxxx
登陸成功后,然后直接執(zhí)行 exit ,退出
(3) 分析 tcpdump 抓取的網(wǎng)絡(luò)包,如下:
數(shù)據(jù)包標(biāo)記解析
S=SYN 發(fā)起連接標(biāo)志,一般用于建立 TCP 連接
P=PUSH 傳送數(shù)據(jù)標(biāo)志,一般用于傳輸數(shù)據(jù)
F=FIN 關(guān)閉連接標(biāo)志,一般用于關(guān)閉 TCP 連接
ack 表示應(yīng)答包
RST= RESET 異常關(guān)閉連接
. 表示沒有任何標(biāo)志
第 1 部分是 TCP 連接建立的 3 次握手過程 :
102 (客戶端)向 104 (服務(wù)端)發(fā)起連接 ------ 》
104 (服務(wù)端)向 102 (客戶端)發(fā)起連接和應(yīng)答包 ----- 》
102 (客戶端)向 104 (服務(wù)端)發(fā)起應(yīng)答 ----- 》
TCP 建立連接。
第 2 部分是 MYSQL 認(rèn)證的過程 :
第 4 、 5 步是服務(wù)端向客戶端發(fā)送服務(wù)端的一些信息,從包內(nèi)容可以看出,包含 version, 字符集等。。
真正的登錄請(qǐng)求是從第 6 步開始:
102 (客戶端)向 104 (服務(wù)端)發(fā)起登錄認(rèn)證請(qǐng)求,用戶是 root------>
104 (服務(wù)端)首先在 tcp 返回應(yīng)答包 , 表示 tcp 連接存在 ------ 》
接著, 104 (服務(wù)端)認(rèn)證通過,返回 OK------->
登錄成功
在第 6 步發(fā)送的數(shù)據(jù)包,包含了用戶密碼這些信息的報(bào)文。
第 3 部分是登陸成功后,發(fā)送基本元數(shù)據(jù)信息的過程,
102 (客戶端)向 104 (服務(wù)端)發(fā)起查詢請(qǐng)求 -------- 》
104 (服務(wù)端)向 102 (客戶端)返回信息 -------- 》
102 (客戶端)返回應(yīng)答包 -------- 》
查詢完成。
第 4 部分是斷開連接的過程
MYSQL 監(jiān)聽及連接線程
MYSQL 監(jiān)聽基于 TCP 協(xié)議 ,在服務(wù)器的 3306 端口, MySQL 服務(wù)反復(fù)監(jiān)聽是否有客戶端發(fā)過來的請(qǐng)求:
當(dāng)新的連接成功后,連接會(huì)話是在數(shù)據(jù)庫中創(chuàng)建一個(gè)新的前臺(tái)線程。
該前臺(tái)線程在數(shù)據(jù)庫中有自己的 id, 同時(shí)對(duì)應(yīng)到 os 層面存在相應(yīng)的線程號(hào),該線程是在 mysqld 進(jìn)程下。
分享文章:MYSQL連接登錄過程分析
標(biāo)題URL:http://bm7419.com/article14/pdhjge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、品牌網(wǎng)站建設(shè)、電子商務(wù)、建站公司、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)