MySQL1:客戶端/服務器架構

1、MySQL的客戶端/服務器架構

前言

以前對MySQL的認知只限於會寫些SQL,本篇算是筆記,記錄和整理下本身對MySQL不熟悉的地方。mysql

大體邏輯
MySQL的服務器程序直接和咱們存儲的數據打交道,客戶端程序鏈接服務器,發送增刪改查的請求,服務器操做維護的數據響應請求。sql

MySQL服務器程序的進程也被稱爲MySQL數據庫實例。咱們啓動的MySQL服務器進程的默認名稱是mysqld,而經常使用的MySQL客戶端進程默認名稱爲mysql數據庫

安裝

不論經過哪一種方式安裝,MySQL的服務器程序和客戶端都會被安裝到咱們的機器上。windows

不過在Linux下使用RPM包時會有單獨的服務器RPM包和客戶端RPM包,須要分別安裝。緩存

啓動服務器程序

mysqld

表明着mysql服務器程序,運行這個可執行文件就能夠直接啓動一個服務器進程。服務器

mysqld_safe

  • 是一個啓動腳本,會間接的調用mysqld。數據結構

  • 還順便啓動了另一個監控進程,這個監控進程在服務器進程掛了的時候,能夠幫助重啓它。架構

  • 會將服務器程序的出錯信息和其餘診斷信息重定向到某個文件中,產生出錯日誌。socket

mysql.server

也是一個啓動腳本,會間接的調用mysqld_safe,使用時跟上start/stop參數就OK。tcp

不過這個文件實際上是一個連接文件,實際文件是../support-files/mysql.server.

mysqld_multi

一臺計算機上能夠運行多個MySQL服務器進程,這個可執行文件能夠對每個服務器進程的啓動或中止進行監控。

啓動客戶端程序

格式:

mysql -h主機名 -u用戶名 -p密碼

小貼士: 像 h、u、p 這樣名稱只有一個英文字母的參數稱爲短形式的參數,使用時前邊須要加單短劃線,像 host、user、password 這樣大於一個英文字母的參數稱爲長形式的參數,使用時前邊須要加雙短劃線。

客戶端與服務器鏈接的過程

本質上進程間通訊的過程,MySQL支持如下的通訊方式

TCP/IP

MySQL服務器默認監聽3306端口。

命名管道和共享內存

這種通訊方式是windows操做系統中的

Unix域套接字文件

這種方式要求客戶端和服務器運行在同一臺類Unix的操做系統上。
MySQL服務器程序默認監聽的套接字文件路徑是/tmp/mysql.sock,客戶端也默認監聽這個文件。

改變文件:

# 服務器改變套接字文件
mysqld --socket=/tmp/a.txt
# 客戶端改變
mysql -hlocalhost -uroot --socket=/tmp/a.txt -p

架構

MySQL架構圖

鏈接管理

客戶端與服務器進程創建鏈接,每當有一個客戶端進程鏈接到服務器進程時,服務器進程都會建立一個線程來專門處理與這個客戶端的交互,當該客戶端退出時會與服務器斷開鏈接,服務器會把線程緩存起來。

解析與優化

查詢緩存

若是兩個查詢請求在任何字符上的不一樣都會致使緩存不命中。請求中包含某些系統函數、用戶自定義變量和函數、一些系統表也不會被緩存。

只要該表的結構或者數據被修改,則該表的全部高速緩存查詢都將無效並刪除。

PS:8.0中查詢緩存已經刪除了

語法解析

若是查詢緩存沒有命中,就進入查詢階段,服務器先對文本作分析,判斷語法是否正確,而後從文本中將要查詢的表、各類查詢條件都提取出來放到內部使用的一些數據結構上。

算是一個編譯過程,涉及詞法解析、語法分析、語義分析等階段。

查詢優化

對SQL作優化,生成一個執行計劃,代表了應該使用哪些索引進行查詢,表之間的鏈接順序是怎樣的。

這塊能夠使用explain profile來查看。

存儲引擎

數據的存儲和提取操做都封裝到了這個模塊裏。不一樣的存儲引擎使用不一樣的存儲方式。

參考

本文主要參考小孩子寫的《MySQL是怎樣運行的:從根兒上理解MySQL》
想學習的同窗能夠經過如下方式購買,絕對超值!

相關文章
相關標籤/搜索