天天看點

mysql原理

一、MySQL簡單介紹

    MySQL是當今最流行的開源資料庫管理系統,超過10億的下載下傳量足可以證明這點。MySQL以其速度、高可靠性、簡單易用,廣泛應用,一些大型企業也在逐漸應用,如:Facebook、維基百科等網站。MySQL最早由瑞典的MySQL AB公司開發,後于2008年被Sun收購,2009年Oracle公司收購了Sun公司。它分為社群版和商業版,其體積小、速度快、總體成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇MySQL作為網站資料庫。其社群版的性能卓越,搭配PHP和Apache可組成良好的開發環境。

二、MySQL的基本組成部分流程圖:

<a href="http://img1.51cto.com/attachment/201304/083256220.png" target="_blank"></a>

流程圖詳解:

    所有的使用者連接配接請求都是先發往連接配接管理器的,連接配接管理器(是一個偵聽器)用于偵聽來自用戶端的連接配接,并接受使用者請求,使用者請求被接收下來,而一個使用者請求需要一個線程來響應,是以需要一個線程管理器。線程管理器負責給使用者建立生成新的線程或完成線程重置的方式給使用者一個響應線程,使用者連接配接進來後需要檢查使用者權限(是否允許通路mysql伺服器等等權限)。這時就需要使用者子產品出場了,使用者子產品負責管理使用者是否能夠連接配接的,這是管理權限的第一關,如果使用者不能請求,那使用者請求就終止了,是以使用者子產品還負責退回使用者請求(主要作用是驗證使用者請求和使用者身份的)。

    一旦使用者具有連接配接的權限,那使用者就可以發一些SQL語句,而每一個SQL語句需要進行分析,不同的語句需要配置設定給不同的解析器,是以就需要指令分發子產品,就把這些不同類型的語句配置設定給與之對應的解析器上去。如果指令在分發之前是一個查詢語句,而且我們的緩存中有内容,就可以直接傳回給使用者結果了,是以也有可能會跟緩存子產品進行互動。當使用者發起一個指令之後,例如我們的web,當使用者請求資源後,都會記錄在日志中的,是以指令分發子產品也有可能會和日志子產品進行互動的,日志子產品的主要功能是記錄使用者查詢的。緩存子產品和日志子產品并不是并行的,指令分發子產品給兩者都有可能有互動的。

    如果緩存中沒有就要将使用者請求的指令分發出去,将指令交給解析器(解析查詢生成解析數),由解析器判斷指令最終屬于哪種語句,如果解析器解析此指令是select語句,需要交給優化器進行優化。如果是update、insert、delete語句,需要交給表定義子產品(這一過程也要進行權限的判斷)。mysql也有與repair相關的語句,那可想而知需要表維護子產品了,表維護子產品主要作用是修複表中的某些邏輯錯誤的。mysql中也有很多狀态變量,而這些狀态變量也需要狀态報告子產品來存儲每一個執行過程中的狀态資訊。mysql也有複制的功能,把主mysql伺服器上的資料同步到從mysql伺服器上的過程,這就是複制子產品的功能。

    無論哪個子產品,使用者最終要完成操作,必須要檢查使用者是否具有權限,上面所說的表定義子產品、表維護子產品都需要檢查使用者權限,是以最終這些指令語句都要交給通路控制子產品來控制:用于檢驗用戶端使用者的操作是否具有足夠的操作權限,來執行請求操作如果通路子產品檢查後發現沒有任何問題,會把這些指令語句交給另一個元件表管理器,由表管理器完整真正意義上的操作,表管理器負責建立、讀取或修改表定義檔案的。表管理器交給存儲引擎(存儲引擎的接口),存儲引擎交給最核心的--&gt;MYISAM或INnoDB

本文轉自飛奔的小GUI部落格51CTO部落格,原文連結http://blog.51cto.com/9237101/1914277如需轉載請自行聯系原作者

ziwenzhou