最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫(kù)體系架構(gòu)詳情

 更新時(shí)間:2021年09月06日 17:18:20   作者:冰 河  
這篇文章主要介紹了MySQL體系架構(gòu),根據(jù)大部分的面試內(nèi)容所描述,需要的朋友可以參考下面文章內(nèi)容

前言:

很多小伙伴工作很長(zhǎng)時(shí)間了,對(duì)于MySQL的掌握程度卻僅僅停留在表面的CRUD,對(duì)于MySQL深層次的原理和技術(shù)知識(shí)了解的少之又少,隨著工作年限的不斷增長(zhǎng),職場(chǎng)競(jìng)爭(zhēng)力卻是不斷降低的。很多時(shí)候,出去面試時(shí),被面試官吊打的現(xiàn)象成了家常便飯。比如,對(duì)于MySQL的高頻面試題有:

  • 說(shuō)說(shuō)MySQL中MVCC機(jī)制的原理?
  • MySQL的事務(wù)原理和實(shí)現(xiàn)?
  • MySQL數(shù)據(jù)主從復(fù)制的原理?
  • MySQL底層數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)?
  • 如何使MySQL支持海量數(shù)據(jù)存儲(chǔ)?
  • MySQL中的鎖機(jī)制原理和實(shí)現(xiàn)?
  • MySQL索引機(jī)制?索引中涉及的數(shù)據(jù)結(jié)構(gòu)和算法?
  • MySQL為何使用B+樹(shù)作為索引結(jié)構(gòu)?
  • B+樹(shù)可以存放多少數(shù)據(jù)?
  • 說(shuō)說(shuō)MySQL中間隙鎖的實(shí)現(xiàn)原理?
  • InnoDB引擎為何會(huì)崩潰?說(shuō)說(shuō)其實(shí)現(xiàn)原理?
  • 等等其他一系列高頻面試

如果一一列舉的話,大概能夠列舉上百個(gè)關(guān)于MySQL的高頻面試題,這些你都會(huì)嗎?

不僅僅是面試,如果你想從一名底層程序員上升為高級(jí)工程師,架構(gòu)師等,MySQL的底層原理和技術(shù)是你必須要掌握的。

注:冰河后續(xù)會(huì)不定時(shí)連載MySQL底層原理和技術(shù)的文章,與小伙伴們一起死磕MySQL,將冰河掌握的MySQL底層技術(shù)分享給大家,在面試時(shí)吊打面試官,在工作中吊打其他小伙伴。

一、MySQL體系架構(gòu)

我們先來(lái)看看MySQL的體系架構(gòu)圖,如下所示。

從MySQL的架構(gòu)圖,我們可以看出MySQL的架構(gòu)自頂向下大致可以分為網(wǎng)絡(luò)連接層、數(shù)據(jù)庫(kù)服務(wù)層、存儲(chǔ)引擎層和系統(tǒng)文件層四大部分。接下來(lái),我們就來(lái)簡(jiǎn)單說(shuō)說(shuō)每個(gè)部分的組成信息。

二、網(wǎng)絡(luò)連接層

網(wǎng)絡(luò)連接層位于整個(gè)MySQL體系架構(gòu)的最上層,主要擔(dān)任客戶端連接器的角色。提供與MySQL服務(wù)器建立連接的能力,幾乎支持所有主流的服務(wù)端語(yǔ)言,例如:Java、C、C++、Python等,各語(yǔ)言都是通過(guò)各自的API接口與MySQL建立連接。

三、數(shù)據(jù)庫(kù)服務(wù)層

數(shù)據(jù)庫(kù)服務(wù)層是整個(gè)數(shù)據(jù)庫(kù)服務(wù)器的核心,主要包括了系統(tǒng)管理和控制工具、連接池、SQL接口、解析器、查詢優(yōu)化器和緩存等部分。

四、連接池

主要負(fù)責(zé)存儲(chǔ)和管理客戶端與數(shù)據(jù)庫(kù)的連接信息,連接池里的一個(gè)線程負(fù)責(zé)管理一個(gè)客戶端到數(shù)據(jù)庫(kù)的連接信息。

五、系統(tǒng)管理和控制工具

提供數(shù)據(jù)庫(kù)系統(tǒng)的管理和控制功能,例如對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行備份和恢復(fù),保證整個(gè)數(shù)據(jù)庫(kù)的安全性,提供安全管理,對(duì)整個(gè)數(shù)據(jù)庫(kù)的集群進(jìn)行協(xié)調(diào)和管理等。

六、SQL接口

主要負(fù)責(zé)接收客戶端發(fā)送過(guò)來(lái)的各種SQL命令,并將SQL命令發(fā)送到其他部分,并接收其他部分返回的結(jié)果數(shù)據(jù),將結(jié)果數(shù)據(jù)返回給客戶端。

七、解析樹(shù)

主要負(fù)責(zé)對(duì)請(qǐng)求的SQL解析成一棵“解析樹(shù)”,然后根據(jù)MySQL中的一些規(guī)則對(duì)“解析樹(shù)”做進(jìn)一步的語(yǔ)法驗(yàn)證,確認(rèn)其是否合法。

八、查詢優(yōu)化器

在MySQL中,如果“解析樹(shù)”通過(guò)了解析器的語(yǔ)法檢查,此時(shí)就會(huì)由優(yōu)化器將其轉(zhuǎn)化為執(zhí)行計(jì)劃,然后與存儲(chǔ)引擎進(jìn)行交互,通過(guò)存儲(chǔ)引擎與底層的數(shù)據(jù)文件進(jìn)行交互。

九、緩存

MySQL的緩存是由一系列的小緩存組成的。例如:MySQL的表緩存,記錄緩存,MySQL中的權(quán)限緩存,引擎緩存等。MySQL中的緩存能夠提高數(shù)據(jù)的查詢性能,如果查詢的結(jié)果能夠命中緩存,則MySQL會(huì)直接返回緩存中的結(jié)果信息。

十、存儲(chǔ)引擎層

MySQL中的存儲(chǔ)引擎層主要負(fù)責(zé)數(shù)據(jù)的寫(xiě)入和讀取,與底層的文件進(jìn)行交互。值得一提的是,MySQL中的存儲(chǔ)引擎是插件式的,服務(wù)器中的查詢執(zhí)行引擎通過(guò)相關(guān)的接口與存儲(chǔ)引擎進(jìn)行通信,同時(shí),接口屏蔽了不同存儲(chǔ)引擎之間的差異。MySQL中,最常用的存儲(chǔ)引擎就是InnoDB和MyISAM。

InnoDB和MyISAM存儲(chǔ)引擎需要小伙伴們重點(diǎn)掌握,高頻面試考點(diǎn),也是成為架構(gòu)師必知必會(huì)的內(nèi)容。

十一、系統(tǒng)文件層

系統(tǒng)文件層主要包括MySQL中存儲(chǔ)數(shù)據(jù)的底層文件,與上層的存儲(chǔ)引擎進(jìn)行交互,是文件的物理存儲(chǔ)層。其存儲(chǔ)的文件主要有:日志文件、數(shù)據(jù)文件、配置文件、MySQL的進(jìn)行pid文件和socket文件等。

十二、日志文件

MySQL中的日志主要包括:錯(cuò)誤日志、通用查詢?nèi)罩?、二進(jìn)制日志、慢查詢?nèi)罩镜取?/p>

1、錯(cuò)誤日志

主要存儲(chǔ)的是MySQL運(yùn)行過(guò)程中產(chǎn)生的錯(cuò)誤信息??梢允褂孟旅娴腟QL語(yǔ)句來(lái)查看MySQL中的錯(cuò)誤日志。

show variables like '%log_error%';

2、通用查詢?nèi)罩?br />

主要記錄MySQL運(yùn)行過(guò)程中的一般查詢信息,可以使用下面的SQL語(yǔ)句來(lái)查看MySQL中的通用查詢?nèi)罩疚募?/p>

show variables like '%general%';

3、二進(jìn)制日志

主要記錄對(duì)MySQL數(shù)據(jù)庫(kù)執(zhí)行的插入、修改和刪除操作,并且也會(huì)記錄SQL語(yǔ)句執(zhí)行的時(shí)間、執(zhí)行的時(shí)長(zhǎng),但是二進(jìn)制日志不記錄select、show等不修改數(shù)據(jù)庫(kù)的SQL。主要用于恢復(fù)數(shù)據(jù)庫(kù)的數(shù)據(jù)和實(shí)現(xiàn)MySQL主從復(fù)制。

查看二進(jìn)制日志是否開(kāi)啟。

show variables like '%log_bin%';

查看二進(jìn)制日志的參數(shù)

show variables like '%binlog%'

查看日志文件

show binary logs;

4、慢查詢?nèi)罩?br />

慢查詢主要記錄的是執(zhí)行時(shí)間超過(guò)指定時(shí)間的SQL語(yǔ)句,這個(gè)時(shí)間默認(rèn)是10秒。

查看是否開(kāi)啟慢查詢?nèi)罩?/strong>

show variables like '%slow_query%';

查看慢查詢?cè)O(shè)置的時(shí)長(zhǎng)

show variables like '%long_query_time%'

十三、數(shù)據(jù)文件

數(shù)據(jù)文件中主要包括了:db.opt文件、frm文件、MYD文件、MYI文件、ibd文件、ibdata文件、ibdata1文件、ib_logfile0和ib_logfile1文件等。

1、db.opt文件

主要記錄當(dāng)前數(shù)據(jù)庫(kù)使用的字符集和檢驗(yàn)規(guī)則等信息。

2、frm文件

存儲(chǔ)數(shù)據(jù)表的結(jié)構(gòu)信息,主要是數(shù)據(jù)表相關(guān)的元數(shù)據(jù)信息,包括數(shù)據(jù)表的表結(jié)構(gòu)定義信息,每張表都會(huì)有一個(gè)frm文件。

值得注意的是:MySQL8版本中的innodb存儲(chǔ)引擎的表沒(méi)有frm文件。(后面專(zhuān)門(mén)寫(xiě)一些MySQL8新特性的文章,從使用到底層原理與MySQL5到底有何不同)。

3、MYD文件

MyISAM存儲(chǔ)引擎專(zhuān)用的文件格式,主要存放MyISAM存儲(chǔ)引擎數(shù)據(jù)表中的數(shù)據(jù),每張MyISAM存儲(chǔ)引擎表對(duì)應(yīng)一個(gè).MYD文件。

4、MYI文件

MyISAM存儲(chǔ)引擎專(zhuān)用的文件格式,主要存放與MyISAM存儲(chǔ)引擎數(shù)據(jù)表相關(guān)的索引信息,每張MyISAM存儲(chǔ)引擎表對(duì)應(yīng)一個(gè).MYI文件。

5、ibd文件

存放Innodb存儲(chǔ)引擎的數(shù)據(jù)文件和索引文件,主要存放的是獨(dú)享表空間的數(shù)據(jù)和索引,每張表對(duì)應(yīng)一個(gè).ibd文件。

6、ibdata文件

存放Innodb存儲(chǔ)引擎的數(shù)據(jù)文件和索引文件,主要存放的是共享表空間的數(shù)據(jù)和索引,所有表共用一個(gè)(或者多個(gè)).ibdata文件,可以根據(jù)配置來(lái)指定共用的.ibdata文件個(gè)數(shù)。

7、ibdata1文件

MySQL的系統(tǒng)表空間數(shù)據(jù)文件,主要存儲(chǔ)MySQL的數(shù)據(jù)表元數(shù)據(jù)、Undo日志等信息。

8、ib_logfile0和ib_logfile1文件

MySQL數(shù)據(jù)庫(kù)中的Redo log文件,主要用于MySQL實(shí)現(xiàn)事務(wù)的持久性。如果在某個(gè)時(shí)間點(diǎn)MySQL發(fā)生了故障,此時(shí)如果有臟頁(yè)沒(méi)有寫(xiě)入到數(shù)據(jù)庫(kù)的ibd文件中,在重啟MySQL的時(shí)候,MySQL會(huì)根據(jù)Redo Log信息進(jìn)行重做,將寫(xiě)入Redo Log并且尚未寫(xiě)入數(shù)據(jù)表的數(shù)據(jù)進(jìn)行持久化操作。

十四、配置文件

用于存在MySQL所有的配置信息,在Unix/Linux環(huán)境中是my,cnf文件,在Windows環(huán)境中是my.ini文件。

1、pid文件

pid文件是存放MySQL進(jìn)程運(yùn)行時(shí)的進(jìn)程號(hào)的文件,主要存在于Unix/Linux環(huán)境中,具體的存儲(chǔ)目錄可以在my.cnf或者my.ini文件中進(jìn)行配置。

2、socket文件

socket文件和pid文件一樣,都是MySQL在Unix/Linux環(huán)境中運(yùn)行才會(huì)有的文件。在Unix/Linux環(huán)境中,客戶端可以直接通過(guò)socket來(lái)連接MySQL。

到此這篇關(guān)于MySQL體系架構(gòu)詳情的文章就介紹到這了,更多相關(guān)MySQL體系架構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解一條sql語(yǔ)句在mysql中是如何執(zhí)行的

    詳解一條sql語(yǔ)句在mysql中是如何執(zhí)行的

    這篇文章主要介紹了一條sql語(yǔ)句在mysql中是如何執(zhí)行的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • MySQL表添加某一列和刪除某一列的方法

    MySQL表添加某一列和刪除某一列的方法

    MySQL是一種廣泛使用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它是一種開(kāi)源的軟件,由瑞典的MySQL?AB公司開(kāi)發(fā)的,這篇文章主要介紹了關(guān)于MySQL表添加某一列和刪除某一列的sql語(yǔ)句,需要的朋友可以參考下
    2023-06-06
  • mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)設(shè)置字段長(zhǎng)度

    mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)設(shè)置字段長(zhǎng)度

    這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)設(shè)置字段長(zhǎng)度,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • mysql誤刪root用戶恢復(fù)方法

    mysql誤刪root用戶恢復(fù)方法

    這篇文章主要介紹了mysql誤刪root用戶恢復(fù)方法,本文操作是在mysql5.5版本下完成,其它版本僅作參考,需要的朋友可以參考下
    2015-02-02
  • 解決MySQL遇到錯(cuò)誤:1217 - Cannot delete or update a parent row: a foreign key constraint fails

    解決MySQL遇到錯(cuò)誤:1217 - Cannot delete or 

    這篇文章主要介紹了解決MySQL遇到錯(cuò)誤:1217 - Cannot delete or update a parent row: a foreign key constraint fails問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • mysql一次將多條不同sql查詢結(jié)果并封裝到一個(gè)結(jié)果集的實(shí)現(xiàn)方法

    mysql一次將多條不同sql查詢結(jié)果并封裝到一個(gè)結(jié)果集的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于mysql一次將多條不同sql查詢結(jié)果并封裝到一個(gè)結(jié)果集的實(shí)現(xiàn)方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • MySql 中聚合函數(shù)增加條件表達(dá)式的方法

    MySql 中聚合函數(shù)增加條件表達(dá)式的方法

    這篇文章主要介紹了MySql 中聚合函數(shù)增加條件表達(dá)式的方法,需要的朋友可以參考下
    2018-06-06
  • SQL Server數(shù)據(jù)庫(kù)錯(cuò)誤5123解決方案

    SQL Server數(shù)據(jù)庫(kù)錯(cuò)誤5123解決方案

    這篇文章主要介紹了SQL Server數(shù)據(jù)庫(kù)錯(cuò)誤5123解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • mysql group by 對(duì)多個(gè)字段進(jìn)行分組操作

    mysql group by 對(duì)多個(gè)字段進(jìn)行分組操作

    這篇文章主要介紹了mysql group by 對(duì)多個(gè)字段進(jìn)行分組操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • mysql主從庫(kù)不同步問(wèn)題解決方法

    mysql主從庫(kù)不同步問(wèn)題解決方法

    本來(lái)配置可以使用的mysql主從庫(kù)同步的數(shù)據(jù)庫(kù),突然出現(xiàn)無(wú)法同步的情況。那么大家可以參考下面的方法解決下。
    2011-08-08

最新評(píng)論

蓝田县| 平和县| 故城县| 卓尼县| 如东县| 遵义市| 寿宁县| 绍兴市| 扎囊县| 潮安县| 浦东新区| 龙胜| 霞浦县| 大邑县| 平度市| 同德县| 开江县| 乌兰县| 文昌市| 扎赉特旗| 石狮市| 手游| 宜兰县| 济南市| 兴宁市| 昔阳县| 临安市| 上林县| 汤原县| 通化市| 青浦区| 开鲁县| 丹阳市| 昂仁县| 琼中| 咸阳市| 绥德县| 嘉义市| 遵化市| 东莞市| 勃利县|