溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何搭建MySQL邏輯架構(gòu)

發(fā)布時(shí)間:2021-10-25 10:11:45 來(lái)源:億速云 閱讀:152 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)如何搭建MySQL邏輯架構(gòu),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

如果能在頭腦中構(gòu)建出一幅MySQL各組件之間如何協(xié)同工作的架構(gòu)圖,就會(huì)有助于深入理解MySQL服務(wù)器

如何搭建MySQL邏輯架構(gòu)

第一層的服務(wù)并不是MySQL所獨(dú)有的,大多數(shù)基于網(wǎng)絡(luò)的客戶端、服務(wù)器的工具或者服務(wù)都有類似的架構(gòu)。比如連接處理、授權(quán)認(rèn)證、安全等等。這里的客戶端可以理解為PHP,python,java

第二層架構(gòu)是MySQL大多數(shù)核心服務(wù)功能,包括查詢解析,分析,優(yōu)化,緩存以及所有的內(nèi)置函數(shù)(日期,時(shí)間,數(shù)字和加密函數(shù))所有跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn):存儲(chǔ)過(guò)程,觸發(fā)器,視圖等

第三層包含了存儲(chǔ)引擎。存儲(chǔ)引擎負(fù)責(zé)MySQL中數(shù)據(jù)的存儲(chǔ)和提取。和GNU/Linux下的各個(gè)文件系統(tǒng)一樣,每個(gè)存儲(chǔ)引擎都有它的優(yōu)勢(shì)和劣勢(shì)。服務(wù)器通過(guò)api與存儲(chǔ)引擎進(jìn)行通信。這些接口屏蔽了不同存儲(chǔ)引擎之間的差異,使得這些差異對(duì)上層的查詢過(guò)程透明。存儲(chǔ)引擎API包含幾十個(gè)底層函數(shù),用于執(zhí)行諸如“開(kāi)始一個(gè)事物”或者“根據(jù)主鍵提取一行記錄”但是存儲(chǔ)引擎不會(huì)去解析SQL,不同的存儲(chǔ)引擎也不會(huì)相互通信,而只是簡(jiǎn)單地響應(yīng)上層服務(wù)器的請(qǐng)求。

更詳細(xì)的一份執(zhí)行流程圖

如何搭建MySQL邏輯架構(gòu)

1 啟動(dòng)

通過(guò)命令net start mysql(windows) / service mysql start(linux)啟動(dòng)MySQL服務(wù)

調(diào)用初始模塊;初始化模塊就是在數(shù)據(jù)庫(kù)啟動(dòng)的時(shí)候,對(duì)整個(gè)數(shù)據(jù)庫(kù)做的一些初始化操作,比如各種系統(tǒng)環(huán)境變量的初始化,各種緩存,存儲(chǔ)引擎初始化設(shè)置等。

核心api:MySQL數(shù)據(jù)庫(kù)核心api主要實(shí)現(xiàn)了數(shù)據(jù)庫(kù)底層操作的優(yōu)化功能,其中主要包括IO操作、格式化輸出、高性能存儲(chǔ)數(shù)據(jù)結(jié)果算法的優(yōu)化,字符串的處理,其中最重要的是內(nèi)存管理。

2 連接

用戶發(fā)送一條SQL,這個(gè)時(shí)候會(huì)被網(wǎng)絡(luò)交互模塊監(jiān)聽(tīng)到用戶的操作請(qǐng)求,傳遞給‘連接管理模塊’

接收到請(qǐng)求轉(zhuǎn)發(fā)到‘進(jìn)/線程連接模塊’

調(diào)用‘用戶模塊’來(lái)進(jìn)行權(quán)限檢測(cè)(訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限)

通過(guò)檢測(cè)之后就會(huì)去‘連接進(jìn)/線程模塊’從‘線程連接池’中查找空閑的被緩存的連接線程和客戶端請(qǐng)求對(duì)接,如果失敗則創(chuàng)建一個(gè)新的連接請(qǐng)求

返回連接線程

網(wǎng)絡(luò)交互模塊:對(duì)外提供可以接收和發(fā)送數(shù)據(jù)的api接口,其他模塊需要交互的時(shí)候,可以通過(guò)api接口調(diào)用

連接管理模塊、進(jìn)/線程連接模塊、線程連接池:連接管理模塊負(fù)責(zé)監(jiān)聽(tīng)MySQL Server的各種請(qǐng)求,根據(jù)不同的請(qǐng)求,然后轉(zhuǎn)發(fā)到線程管理模塊,每個(gè)客戶請(qǐng)求都會(huì)被數(shù)據(jù)庫(kù)自動(dòng)分配一個(gè)獨(dú)立的線程為其單獨(dú)服務(wù),而連接線程的主要工作就是負(fù)責(zé)MySQL Server與客戶端通信,線程管理模塊負(fù)責(zé)管理這些生成的線程。

3 處理

在用戶權(quán)限校驗(yàn)成功之后,并且獲得新的連接池之后就會(huì)去‘命令分發(fā)器’,判斷命令的類型如果是select就會(huì)去訪問(wèn)‘查詢緩存’,如果沒(méi)有就會(huì)往下執(zhí)行;

如果是select,并且開(kāi)啟’查詢緩存’之后就會(huì)去緩存中查詢是否有與之相匹配的SQL,如果有就會(huì)校驗(yàn)用戶訪問(wèn)該數(shù)據(jù)的權(quán)限,通過(guò)就返回不通過(guò)就會(huì)返回錯(cuò)誤信息. 如果數(shù)據(jù)沒(méi)有就會(huì)往下執(zhí)行

會(huì)記錄過(guò)程中的SQL操作過(guò)程到日志文件中

在第8,9步 沒(méi)有滿足相應(yīng)條件之后往下執(zhí)行進(jìn)入 ‘命令解析器’,經(jīng)過(guò)詞法分析,語(yǔ)法分析后生成解析樹(shù)

根據(jù)操作轉(zhuǎn)到對(duì)應(yīng)的模塊處理(預(yù)處理階段),根據(jù)SQL選擇執(zhí)行的模塊

模塊收到請(qǐng)求后,通過(guò)’訪問(wèn)控制模塊’檢查所連接的用戶是否有訪問(wèn)目標(biāo)表和目標(biāo)字段的權(quán)限(是指訪問(wèn)這些數(shù)據(jù)的權(quán)限)

有權(quán)限’表管理模塊’先查看table cache中是否存在,有則直接對(duì)應(yīng)的表和獲取鎖,負(fù)責(zé)重新打開(kāi)表文件

根據(jù)表的ENGINE數(shù)據(jù),獲取表的存儲(chǔ)引擎類型等信息

通過(guò)接口調(diào)用對(duì)應(yīng)的存儲(chǔ)引擎處理

返回查詢之后數(shù)據(jù)內(nèi)容

用戶模塊:主要功能是用于控制用戶登入連接的權(quán)限和用戶授權(quán)管理。

訪問(wèn)控制模塊:主要用于監(jiān)控用戶的每一個(gè)操作。訪問(wèn)控制模塊實(shí)現(xiàn)的功能就是根據(jù)用戶模塊中不同的用戶授權(quán),以及根據(jù)其數(shù)據(jù)庫(kù)的各種約束來(lái)控制用戶對(duì)數(shù)據(jù)的訪問(wèn)。用戶模塊和訪問(wèn)控制模塊結(jié)合起來(lái),就組成了MySQL數(shù)據(jù)庫(kù)的權(quán)限管理功能。

查詢優(yōu)化器:這個(gè)模塊主要是講客戶端發(fā)送的查詢請(qǐng)求,在之前算法的基礎(chǔ)上分析,計(jì)算出一個(gè)最優(yōu)的查詢策略,優(yōu)化之后會(huì)提高查詢?cè)L問(wèn)的速度,最后根據(jù)其最優(yōu)策略返回查詢語(yǔ)句。

表變更管理模塊:主要負(fù)責(zé)完成DML和DDl的查詢,列如,insert,update,delete,create table,alter table等語(yǔ)句處理。

表維護(hù)模塊:主要用于檢測(cè)表的狀態(tài),分析,優(yōu)化表結(jié)構(gòu),以及修復(fù)表。

復(fù)制模塊:復(fù)制模塊分為Master模塊和Slave模塊兩部分。Master模塊主要負(fù)責(zé)復(fù)制環(huán)境中讀取Master端的binary日志,以及Slave端的I/O線程交互等工作。

狀態(tài)模塊:在客戶端請(qǐng)求系統(tǒng)狀態(tài)的時(shí)候,系統(tǒng)狀態(tài)模塊主要負(fù)責(zé)將各種狀態(tài)的數(shù)據(jù)返回給用戶。最常用的一些查詢狀態(tài)的命令包括show status,show variable等,都是通過(guò)這個(gè)模塊負(fù)責(zé)返回的。

表管理模塊:主要就是維護(hù)系統(tǒng)生成的表文件。列如MyISAM存儲(chǔ)引擎就生成frm,myd,myi文件,維護(hù)這些文件,將這個(gè)表結(jié)構(gòu)的信息緩存起來(lái),另外該模塊還管理表級(jí)別的鎖。

存儲(chǔ)引擎接口模塊:MySQL實(shí)現(xiàn)了其數(shù)據(jù)庫(kù)底層存儲(chǔ)引擎的插件式管理,將各種數(shù)據(jù)處理高度抽象化。

4 結(jié)果

命令執(zhí)行完了之后,將結(jié)果集返回給’理解進(jìn)/線程模塊’(返回的也可以是相應(yīng)標(biāo)識(shí),成功失敗)

'理解進(jìn)/線程模塊’進(jìn)行后續(xù)的清理工作,并繼續(xù)等待請(qǐng)求或斷開(kāi)與客戶端的連接

以上就是如何搭建MySQL邏輯架構(gòu),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI