MySQL邏輯架構圖


大概流程

  1)mysql啟動以后,初始化模塊就從系統配置文件中讀取系統參數和命令參數,初始化整個系統,同時存儲引擎也會啟動;

  2)初始化結束后,連接管理模塊會監聽客戶端的連接請求,並將連接請求轉發給線程管理模塊去請求一個連接線程;

  3)線程模塊接到請求后會調用用戶模塊進行授權檢查,通過授權以后會檢查是否又空閑線程,如果有取出並與客戶端連接,如果沒有則新建立建立一個線程與客戶端連接;

  4)mysql請求分為兩種,一種是需要命令解析和分發才能執行,另一種可以直接執行;不管哪種,如果開啟了日志,那么日志模塊會記錄日志;

  5)如果是Query類型的請求,會將控制權交給Query解析器,Query解析器檢查是否Select類型,如果是則啟動查詢緩存模塊,如果緩存命中則將緩存數據返回給連接線程模塊,連接線程將數據傳遞到客戶端;如果沒有緩存或者不是一個可以緩存的查詢,此時解析器會進行相應的處理,通過查詢分發器給相關的處理模塊;

  6)如果解析器結果是DML/DDL,則交給變更模塊;如果是檢查、修復的查詢交給表維護模塊,如果是一條沒有被緩存的語句,則交給查詢優化器模塊。實際上表變更模塊又分為若干小模塊,例如:insert處理器、delete處理器、update處理器、create處理器,以及alter處理器這些小模塊來負責不同的DML和DDL。總之,查詢優化器、表變更模塊、表維護模塊、復制模塊、狀態模塊都是根據命令解析器的結果不同而分發給不同的類型模塊,最后和存儲引擎進行交互。

  7)當一條命令執行完畢后,控制權都會還給連接線程模塊,在上面各個模塊處理過程中都依賴於核心API模塊,比如:內存管理、文件I/O,字符串處理等。

連接層

  最上層是一些客服端和連接服務,包括sock通信和大多數基於客服端/服務端工具實現的類似於tcp/ip的通信,主要完成一些類似於連接處理、授權認證及相關安全的方案,在該層上引入了線程池的概念,為通過認證安全接入的客服端提供線程,同樣在該層上可以實現基於SSL的安全的連接,服務器也會為安全接入的每個客戶端驗證它所具有的操作權限。

服務層

  第二層架構主要完成大多數的核心服務功能,如SQL接口,並完成緩存的查詢,SQL的分析以及優化部分內置函數的執行,所有跨存儲引擎的功能也在這一層實現,如過程、函數等,服務器會解析查詢並創建相應的內部解析樹,並對其完成相應的優化如確定查詢的順序是否利用索引,最后生成相應的執行操作。

引擎層

  存儲引擎層,存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器通過API與存儲引擎進行通信,不同的存儲引擎具有功能不同

 1 # 編碼
 2 show variables like '%char%';
 3 +--------------------------------------+----------------------------+
 4 | Variable_name                        | Value                      |
 5 +--------------------------------------+----------------------------+
 6 | character_set_client                 | utf8                       |
 7 | character_set_connection             | utf8                       |
 8 | character_set_database               | latin1                     |
 9 | character_set_filesystem             | binary                     |
10 | character_set_results                | utf8                       |
11 | character_set_server                 | latin1                     |
12 | character_set_system                 | utf8                       |
13 | character_sets_dir                   | /usr/share/mysql/charsets/ |
14 | validate_password_special_char_count | 1                          |
15 +--------------------------------------+----------------------------+
16 9 rows in set (0.01 sec)
17 引擎
18 show engines;
19 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
20 | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
21 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
22 | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
23 | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
24 | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
25 | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
26 | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
27 | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
28 | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
29 | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
30 | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
31 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
32 9 rows in set (0.00 sec)
33 
34 show variables like '%storage_engine%';

存儲層

  數據存儲層主要是將數據存儲在運行與裸設備的文件系統之上,丙烷層與存儲引擎的交互


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM