首先mysql是典型的c/s架構,即client/server架構,伺服器端程式使用的mysqld·
不論客戶端程序和伺服器程序是採用哪種方式進行通訊,最後實現的效果都是:客戶端程序向伺服器程序傳送一段文字(sql語句)伺服器程序處理後再向客戶端程序傳送一段文字(處理結果)
那伺服器程序對客戶端程序傳送的請求做了什麼處理,才能產生最後的處理結果呢?這裡以查詢請求為例展示:
下面可以具體看一下
connectors,指的是不同語言中與sql的互動。mysql首先是乙個網路程式,在tcp之上定義了自己的應用層協議。所以要使用mysql,我們可以編寫**,跟mysql server建立tcp連線之後按照其定義好的協議進行互動。或者比較方便的辦法是呼叫sdk,
比如native api. jdbc , php 等各語言 mysql connector ,
但通過sdk 訪問mysql,本質上還是在tcp連線上通過mysql協議跟mysql進行互動:接下來的mysql server結構可以分為如下的三層:
系統(客戶端)訪問 mysql 伺服器前,做的第一件事就是建立 tcp 連線。
經過三次握手建立連線成功後, mysql 伺服器對 tcp 傳輸過來的賬號密碼做身份認證、許可權獲取。
接著我們思考乙個問題
乙個系統只會和mysql伺服器建立乙個連線嗎?只能有乙個系統和mysql伺服器建立連線嗎?
當然不是,多個系統都可以和mysql伺服器建立連線,每個系統建立的連線肯定不止乙個。所以,為了解決tcp無限建立與tcp頻繁建立銷毀帶來的資源耗盡、效能下降問題· mysql伺服器裡有專門的tcp連線池限制連線數,採用長連線模式復用tcp連線,來解決上述問題。
tcp 連線收到請求後,必須要分配給乙個執行緒專門與這個客戶端的互動。所以還會有個執行緒池,去走後 面的流程。每乙個連線從執行緒池中獲取執行緒,省去了建立和銷毀執行緒的開銷。
這些內容我們都歸納到mysql的連線管理元件中。
所以連線管理的職責是負責 認證、管理連線、獲取許可權資訊。
第二層架構主要完成大多數的核心服務功能,如sql接囗,並完成快取的查詢,sql的分析和優化及部分內建函式的執行。所有跨儲存引擎的功能也在這一層實現,如過程、函式等。
在該層,伺服器會解析查詢並建立相應的內部解析樹,並對其完成相應的優化:如確定查詢表的順序,是否利用索引等,最後生成相應的執行操作。
如果是select語句,伺服器還會查詢內部的快取。如果快取空間足夠大,這樣在解決大量讀操作的環境中能夠很好的提公升系統的效能。
parser: 解析器
optimizer: 查詢優化器
caches & buffers: 查詢快取元件
和其它資料庫相比,mysql有點與眾不同,它的架構可以在多種不同場景中應用並發揮良好作用,主要體現在儲存引擎的架構上。外掛程式式的儲存引擎架構將查詢處理和其它的系統任務以及資料儲存提取相分離.這種架構可以根據業務的需求和實際需要選擇合適的儲存引擎同時開 源的mysql允許開發人員設定自己的儲存引擎
這種高效的模組化架構為那些希望專門針對特定應用程式需求(例如資料倉儲, 事務處理,或高可用性情況) 的人提供了巨大的好處, 同時享受使用一組獨立於任何介面和服務的優勢儲存引擎
外掛程式式儲存引擎層( storage engines),真正的負責了mysql中資料的儲存和提取,對物理伺服器級別 維護的底層資料執行操作,伺服器通過api與儲存引擎進行通訊。不同的儲存引擎具有的功能不同,這樣 我們可以根據自己的實際需要進行選取。
mysql 8.0.25預設支援的儲存引擎如下:
所有的資料,資料庫、表的定義,表的每一行的內容,索引,都是存在 檔案系統 上,以 檔案 的方式存 在的,並完成與儲存引擎的互動。當然有些儲存引擎比如innodb,也支援不使用檔案系統直接管理裸設 備,但現代檔案系統的實現使得這樣做沒有必要了。在檔案系統之下,可以使用本地磁碟,可以使用 das、nas、san等各種儲存系統。
mysql架構圖本節開篇所示。下面為了熟悉sql執行流程方便,我們可以簡化如下:
簡化為三層結構:
連線層:客戶端和伺服器端建立連線,客戶端傳送 sql 至伺服器端;
sql 層(服務層):對 sql 語句進行查詢處理;與資料庫檔案的儲存方式無關;
儲存引擎層:與資料庫檔案打交道,負責資料的儲存和讀取。
MySQL邏輯架構
庖丁解牛之前應該也是對牛的骨架有乙個全面的認知。同樣學習資料庫也從mysql的邏輯架構開始吧。了解mysql邏輯架構有助於深入理解mysql伺服器。最上層的服務並不是mysql所獨有的,大多數基於網路的客戶端 伺服器的工具或者服務都有類似的架構。比如連線處理 授權認證 安全等等。第二層,mysql大...
MySQL邏輯架構
mysql伺服器邏輯架構圖如下 每個虛線框為一層,總共三層。最上層的服務不是mysql特有的,大多數基於網路的客戶端 伺服器的工具或者服務都有類似的架構,為請求做連線處理,授權認證,安全等。第二層架構是大多數mysql的核心服務功能所在層,包括查詢解析,分析,優化,快取以及所有的內建函式,所有跨儲存...
MySQL 邏輯架構
對mysql架構的基本情況掌握了,才能深入學習高階mysql的一些知識。1.連線層 最上層是一些客戶端和連線服務,包含 本地sock通訊和大多數基於客戶端 服務端工具實現的類似於tcp ip的通訊。主要完成一些類似於連線處理 授權認證 及相關的安全方案。在該層上引入了執行緒池的概念,為通過認證安全接...