MySQL 體系架構

MySQL Server 架構自頂向下大致可以分 網絡連接層服務層存儲引擎層系統文件層

1. 網絡連接層

  • 客戶端連接器(Client Connectors):提供與 MySQL 服務器建立的支持。目前幾乎支持所有主流的服務端編程技術,例如常見的 Java、C、Python、.NET等,它們通過各自API技術與 MySQL 建立連接。

2. 服務層(MySQL Server)

服務層MySQL Server的核心,主要包含系統管理和控制工具連接池SQL接口解析器查詢優化器緩存六個部分。

  • 連接池(Connection Pool):負責存儲和管理客戶端與數據庫的連接,一個線程負責管理一個連接。
  • 系統管理和控制工具(Management Services & Utilities):例如備份恢復、安全管理、集群管理等
  • SQL接口(SQL Interface):用于接受客戶端發送的各種 SQL 命令,并且返回用戶需要查詢的結果。比如 DMLDDL、存儲過程、視圖、觸發器等。
  • 解析器(Parser):負責將請求的 SQL 解析生成一個"解析樹"。然后根據一些 MySQL 規則進一步檢查解析樹是否合法。
  • 查詢優化器(Optimizer):當“解析樹”通過解析器語法檢查后,將交由優化器將其轉化成執行計劃,然后與存儲引擎交互。

select uid,name from user where gender=1;
選取 > 投影 > 聯接 策略
1)select 先根據 where 語句進行選取,并不是查詢出全部數據再過濾
2)select 查詢根據 uid 和 name 進行屬性投影,并不是取出所有字段
3)將前面選取和投影聯接起來最終生成查詢結果

  • 緩存(Cache & Buffer)緩存機制是由一系列小緩存組成的。比如表緩存記錄緩存權限緩存引擎緩存等。如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據。

3. 存儲引擎層(Pluggable Storage Engines)

存儲引擎負責MySQL中數據的存儲與提取,與底層系統文件進行交互。MySQL 存儲引擎是插件式的,服務器中的查詢執行引擎通過接口與存儲引擎進行通信,接口屏蔽了不同存儲引擎之間的差異 。現在有很多種存儲引擎,各有各的特點,最常見的是MyISAMInnoDB

4. 系統文件層(File System)

該層負責將數據庫的數據和日志存儲在文件系統之上,并完成與存儲引擎的交互,是文件的物理存儲層。主要包含日志文件數據文件配置文件pid 文件socket 文件等。

4.1 日志文件

  • 錯誤日志(Error log)
    默認開啟
SHOW VARIABLES LIKE '%log_error%'
  • 通用查詢日志(General query log)
    記錄一般查詢語句
SHOW VARIABLES LIKE '%general%'
  • 二進制日志(binary log)
    記錄了對 MySQL 數據庫執行的更改操作,并且記錄了語句的發生時間、執行時長;但是它不記錄select、show等不修改數據庫的 SQL。主要用于數據庫恢復和主從復制。
SHOW VARIABLES LIKE '%log_bin%'; // 是否開啟
SHOW VARIABLES LIKE '%binlog%';  // 參數查看
SHOW BINARY LOGS;  // 查看日志文件
  • 慢查詢日志(Slow query log)
    記錄所有執行時間超時的查詢SQL,默認是10秒
SHOW VARIABLES LIKE '%slow_query%'; // 是否開啟
SHOW VARIABLES LIKE '%long_query_time%';  // 時長
SET long_query_time = 5; // 設置慢查詢時長

4.2 配置文件

用于存放 MySQL 所有的配置信息文件,比如my.cnf、my.ini等。

4.3 數據文件

查看數據存儲所在位置

SHOW VARIABLES LIKE '%datadir%'; // 查看數據文件所在位置
  • db.opt 文件:記錄這個庫的默認使用的字符集和校驗規則。
  • frm 文件:存儲與表相關的元數據(meta)信息,包括表結構的定義信息等,每一張表都會有一個frm文件
  • MYD 文件:MyISAM 存儲引擎專用,存放 MyISAM 表的數據(data),每一張表都會有一個.MYD 文件
  • MYI 文件:MyISAM 存儲引擎專用,存放 MyISAM 表的索引相關信息,每一張 MyISAM 表對應一個 .MYI 文件
  • ibd 文件 和 IBDATA 文件:存放 InnoDB 的數據文件(包括索引)。InnoDB 存儲引擎有兩種表空間方式:獨立表空間共享表空間。獨立表空間使用 .ibd 文件 來存放數據,且每一張InnoDB 表對應一個 .ibd 文件。共享表空間使用 .ibdata 文件,所有表共同使用一個(或多個,自行配置).ibdata 文件
  • ibdata1 文件:系統表空間數據文件,存儲表元數據Undo日志等 。
  • ib_logfile0、ib_logfile1 文件:Redo log 日志文件。

4.4 pid 文件

pid 文件mysqld 應用程序在 Unix/Linux 環境下的一個進程文件,和許多其他 Unix/Linux 服務端程序一樣,它存放著自己的進程 id。

4.5 socket 文件

socket 文件 也是在 Unix/Linux 環境下才有的,用戶在 Unix/Linux 環境下客戶端連接可以不通過 TCP/IP 網絡而直接使用 Unix Socket 來連接 MySQL

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一文搞懂MySQL體系架構!! 文章已收錄到:https://github.com/sunshinelyz/tec...
    iamChel閱讀 353評論 0 0
  • 寫在前面 很多小伙伴工作很長時間了,對于MySQL的掌握程度卻僅僅停留在表面的CRUD,對于MySQL深層次的原理...
    冰河團隊閱讀 332評論 0 1
  • 一. MySQL體系結構 1、Connectors指的是不同語言中與SQL的交互 2、Management Ser...
    PennLi閱讀 787評論 0 2
  • 1.MySQL體系結構 由圖,可以看出MySQL最上層是連接組件。下面服務器是由連接池、管理工具和服務、SQL接口...
    晨風0o閱讀 100評論 0 0
  • 學習 MySQL 的整體架構之前,我們先了解一下如何設計一個關系型數據;我們設計數據庫的時候,主要需要考慮兩個核心...
    lframe閱讀 846評論 0 0