国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MYSQL 連接登錄步驟分析

2024-07-24 12:34:51
字體:
來源:轉載
供稿:網友
  MYSQL 連接登錄過程分析
  在較新MYSQL版本中,默認沒有開啟線程池的功能,每個客戶連接在服務器進程中都擁有自己的線程。
  
  當客戶端(應用)連接到MySQL服務器時,服務器要對其進行認證(Authenticate),認證方式基于用戶名、原始主機信息和口令。
 
  登錄 mysql 可以通過 Unix socket 與 TCP 兩種方式登陸,
 
  Unix socket 是實現進程間通信的一種方式, mysql 支持利用 Unix socket 來實現客戶端 - 服務端的通信,但要求客戶端和服務端在同一臺機器上。對于 unix socket 而言,同樣也是一種套接字,監聽線程會同時監聽 TCP socket 和 Unix socket ,接受到請求然后處理,后續的處理邏輯都是一致的,只不過底層通信方式不一樣罷了。此處具體分析 TCP 的方式。
 
  具體過程,里面會涉及 client 與 server 的交互,并通過 tcpdump 抓包來展現這一過程。
 
  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  異常關閉連接
 
  . 表示沒有任何標志
 
  MYSQL 連接登錄過程分析
 
  第 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 進程下。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北海市| 龙口市| 汝南县| 仲巴县| 白城市| 绵竹市| 文成县| 湘阴县| 丹凤县| 滁州市| 集贤县| 广南县| 鄯善县| 临高县| 浦县| 双鸭山市| 佳木斯市| 嵩明县| 新和县| 济源市| 全州县| 巧家县| 庄浪县| 颍上县| 镇江市| 木兰县| 眉山市| 翼城县| 东台市| 濮阳市| 南乐县| 莱芜市| 肥城市| 阳谷县| 灵台县| 东阿县| 青岛市| 应用必备| 商丘市| 淳安县| 浦县|