MySQL 體系架構(gòu)

MySQL Server 架構(gòu)自頂向下大致可以分 網(wǎng)絡(luò)連接層、服務(wù)層存儲引擎層系統(tǒng)文件層。

1. 網(wǎng)絡(luò)連接層

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

2. 服務(wù)層(MySQL Server)

服務(wù)層MySQL Server的核心,主要包含系統(tǒng)管理和控制工具、連接池、SQL接口解析器、查詢優(yōu)化器緩存六個部分。

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

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

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

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

存儲引擎負責(zé)MySQL中數(shù)據(jù)的存儲與提取,與底層系統(tǒng)文件進行交互。MySQL 存儲引擎是插件式的,服務(wù)器中的查詢執(zhí)行引擎通過接口與存儲引擎進行通信,接口屏蔽了不同存儲引擎之間的差異 ?,F(xiàn)在有很多種存儲引擎,各有各的特點,最常見的是MyISAMInnoDB

4. 系統(tǒng)文件層(File System)

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

4.1 日志文件

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

4.2 配置文件

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

4.3 數(shù)據(jù)文件

查看數(shù)據(jù)存儲所在位置

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

4.4 pid 文件

pid 文件mysqld 應(yīng)用程序在 Unix/Linux 環(huán)境下的一個進程文件,和許多其他 Unix/Linux 服務(wù)端程序一樣,它存放著自己的進程 id。

4.5 socket 文件

socket 文件 也是在 Unix/Linux 環(huán)境下才有的,用戶在 Unix/Linux 環(huán)境下客戶端連接可以不通過 TCP/IP 網(wǎng)絡(luò)而直接使用 Unix Socket 來連接 MySQL。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容