溫馨提示×

溫馨提示×

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

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

MySQL數(shù)據(jù)庫體系架構(gòu)以及緩存日志等知識點詳細講解

發(fā)布時間:2021-09-07 02:40:03 來源:億速云 閱讀:122 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“MySQL數(shù)據(jù)庫體系架構(gòu)以及緩存日志等知識點詳細講解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“MySQL數(shù)據(jù)庫體系架構(gòu)以及緩存日志等知識點詳細講解”吧!

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

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

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

  • 四、連接池

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

  • 六、SQL接口

  • 七、解析樹

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

  • 九、緩存

  • 十、存儲引擎層

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

  • 十二、日志文件

    • 1、錯誤日志

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

    • 3、二進制日志

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

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

    • 1、db.opt文件

    • 2、frm文件

    • 3、MYD文件

    • 4、MYI文件

    • 5、ibd文件

    • 6、ibdata文件

    • 7、ibdata1文件

    • 8、ib_logfile0和ib_logfile1文件

  • 十四、配置文件

    • 1、pid文件

    • 2、socket文件

前言:

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

  • 說說MySQL中MVCC機制的原理?

  • MySQL的事務(wù)原理和實現(xiàn)?

  • MySQL數(shù)據(jù)主從復(fù)制的原理?

  • MySQL底層數(shù)據(jù)的存儲結(jié)構(gòu)?

  • 如何使MySQL支持海量數(shù)據(jù)存儲?

  • MySQL中的鎖機制原理和實現(xiàn)?

  • MySQL索引機制?索引中涉及的數(shù)據(jù)結(jié)構(gòu)和算法?

  • MySQL為何使用B+樹作為索引結(jié)構(gòu)?

  • B+樹可以存放多少數(shù)據(jù)?

  • 說說MySQL中間隙鎖的實現(xiàn)原理?

  • InnoDB引擎為何會崩潰?說說其實現(xiàn)原理?

  • 等等其他一系列高頻面試

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

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

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

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

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

MySQL數(shù)據(jù)庫體系架構(gòu)以及緩存日志等知識點詳細講解

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

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

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

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

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

四、連接池

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

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

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

六、SQL接口

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

七、解析樹

主要負責(zé)對請求的SQL解析成一棵“解析樹”,然后根據(jù)MySQL中的一些規(guī)則對“解析樹”做進一步的語法驗證,確認其是否合法。

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

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

九、緩存

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

十、存儲引擎層

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

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

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

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

十二、日志文件

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

1、錯誤日志

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

show variables like '%log_error%';
2、通用查詢?nèi)罩?br/>

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

show variables like '%general%';
3、二進制日志

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

查看二進制日志是否開啟。

show variables like '%log_bin%';

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

show variables like '%binlog%'

查看日志文件

show binary logs;
4、慢查詢?nèi)罩?br/>

慢查詢主要記錄的是執(zhí)行時間超過指定時間的SQL語句,這個時間默認是10秒。

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

show variables like '%slow_query%';

查看慢查詢設(shè)置的時長

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文件

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

2、frm文件

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

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

3、MYD文件

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

4、MYI文件

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

5、ibd文件

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

6、ibdata文件

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

7、ibdata1文件

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

8、ib_logfile0和ib_logfile1文件

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

十四、配置文件

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

1、pid文件

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

2、socket文件

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

到此,相信大家對“MySQL數(shù)據(jù)庫體系架構(gòu)以及緩存日志等知識點詳細講解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

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

AI