mysql資料管理系統是架構 Mysql系統架構

2021-10-18 11:30:17 字數 2288 閱讀 5353

1.初始化模組

buffer,cache,系統變數

2.核心api

資料結構,特殊演算法,str處理,數字處理,檔案i/o,格式化輸出,mem cntl

3.網路互動模組

底層網路互動模組抽象出網路底層資料的傳送和接收所需要的api,被其他模組呼叫

4.client&server互動協議模組

客戶端與mysql所特有的資訊互動協議,建立在os和網路協議上。

5.使用者模組,訪問控制模組

mysql的大門,使用者登入連線許可權控制,使用者授權管理

mysql,根據使用者授權模組使用者的許可權資訊,控制使用者對資料的訪問。

共同組成mysql的許可權管理,實現安全訪問

6.連線管理,連線線程,執行緒管理

監聽mysql server的各種請求,將接受到的連線請求**到執行緒管理模組。每乙個連線到mysql server的客戶端請求都會被分配乙個連線線程為其單獨服務。連線線程負責mysql與客戶端的同學,接受客戶端的命令請求,傳遞server端的結果,執行緒管理維護這些連線線程,包括執行緒的建立,執行緒的快取。

7.query解析和query**

對發來的query執行語法分析和語義分析,對query進行分類,根據query的型別,**到不同的處理模組

8.query cache模組

cache select類結果

9.query優化

10.表變更管理模組

負責dml和ddl,資料操作語言,資料定義語言

update ,delete ,insert ,create table,alter table等

11.表維護模組

表狀態檢測,查錯

12.系統狀態管理

常用show status命令

13.表管理器

主要工作維護 *.frm這些表定義檔案,區別於表維護模組

14.日誌記錄

erro log,slow query log,binary log

15.複製模組

16.儲存引擎介面模組

mysql支援引擎的可拔插,這樣根據不同的需要,我們就可以選用不同的儲存引擎

下面附圖

我們來根據這個圖簡單描述一下各個模組式如何配合工作的。

首先mysql啟動,初始化模組初始化各種buffeer,各種cache,讀取系統的環境變數,命令引數,完成系統的初始化。與此同時應用的儲存引擎啟動。到此為止,系統初始化完成,這時候轉交給連線管理模組,連線管理模組啟動網路監聽。現在mysql啟動完成。

當連線管理模組接受到連線請求的時候,將連線請求全部**給連線線程模組。連線線程模組首先從執行緒池中看有沒有空閒的執行緒,有的話取出乙個和客戶端發來的請求連線上,如果沒有就建立一條新執行緒來響應。當然在有連線請求發來的時候,並不會直接就分配執行緒去響應,需要使用者模組進行許可權檢查,如果授權通過,則才能進行執行緒的連線。

在連線上了以後,客戶端發來的請求分為兩種,一種是command,一種是query。對於command直接執行即可,對於query就顯得複雜的多。

連線的成功的過程是,客戶端請求和連線線程互通協議,ok以後,連線線程就開始處理各種客戶端發來的命令或query。對於query,首先由query解析器分析query。首先判斷query是否是乙個select類的query,如果是,則先查詢快取模組,查詢該條query對於的query cache(也就是他的查詢結果)是否存在,如果存在,直接取cache返回,如果不存在,則由query解析器繼續處理query,將他**給查詢優化器,通過特定的演算法,進行優化。如果是dml或者ddl語句(crud等操作)則交給表變更管理模組,如果是統計,檢測修復,整理類的query,,則將交給表維護模組去處理,如果是複製相關的操作,則交給複製模組,如果是請求狀態的query,則交給狀態模組。

對於dml或ddl語句的處理,表變更處理器將根據query的具體內容,分別交給insert處理單元,update處理單元,delete處理單元,create處理單元。

各模組受到命令解析器模組分發過來的請求之後,首先通過訪問控制模組驗證許可權,是否可以訪問某資料庫,某錶,某欄位,是否可以進行crud的操作等等,如果使用者擁有這個許可權,則請求對應的表,並進行對應的加鎖操作。

請求到對應的表之後,表管理模組首先先查table cahe,如果已經開啟則直接進行鎖相關處理,否則必須開啟表檔案獲取鎖,然後將開啟的表交給表變更管理模組。

表變更管理模組獲取開啟的表之後,就會更具表的meta資訊,判斷儲存引擎,通過儲存引擎藉口呼叫指定的儲存引擎進行處理。

上面就是各模組協調工作的基本過程,整個過程以來與核心的api模組。

MySQL 資料管理

方式1 方式2 資料庫意義 資料儲存,資料管理 dml 語言 資料操作語言 插入語句 新增 insert into 表名 欄位名1,欄位2,欄位3 values 值1 值2 值3 一般寫插入語句,我們一定要資料和字段一一對應!注意事項 1.欄位和字段之間使用 英文逗號 隔開 2.欄位是可以省略的,但...

MySQL資料管理

外來鍵管理 外來鍵作用 外來鍵用來強制引用完整性,乙個表可以有多個外來鍵 建立外來鍵 a 建表時指定外來鍵約束 定義外來鍵約束語法 constraint 外鍵名 foreign key 外來鍵字段 references 關聯表名 關聯字段 b 建表後修改子表新增外來鍵 新增外來鍵約束語法 alter...

mysql資料管理

外來鍵 刪除有外來鍵關係的表時,要先刪除引用該外來鍵的表,在刪除這個外來鍵的表 新增外來鍵 資料庫級別的外來鍵,不建議使用 避免資料庫過多造成困擾 最好使用程式級別的方法去呼叫 alter table 表名 add constraint 約束名 foreign key 作為外來鍵的列 referen...