久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

什么是MySQL體系架構

138次閱讀
沒有評論

共計 3452 個字符,預計需要花費 9 分鐘才能閱讀完成。

本篇內容主要講解“什么是 MySQL 體系架構”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“什么是 MySQL 體系架構”吧!

寫在前面

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

說說 MySQL 中 MVCC 機制的原理?

MySQL 的事務原理和實現?

MySQL 數據主從復制的原理?

MySQL 底層數據的存儲結構?

如何使 MySQL 支持海量數據存儲?

MySQL 中的鎖機制原理和實現?

MySQL 索引機制? 索引中涉及的數據結構和算法?

MySQL 為何使用 B + 樹作為索引結構?

B+ 樹可以存放多少數據?

說說 MySQL 中間隙鎖的實現原理?

InnoDB 引擎為何會崩潰? 說說其實現原理?

等等其他一系列高頻面試

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

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

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

文章已收錄到:

https://github.com/sunshinelyz/technology-binghe

https://gitee.com/binghe001/technology-binghe

MySQL 體系架構

我們先來看看 MySQL 的體系架構圖,如下所示。

注:圖片來自互聯網

從 MySQL 的架構圖,我們可以看出 MySQL 的架構自頂向下大致可以分為網絡連接層、數據庫服務層、存儲引擎層和系統文件層四大部分。接下來,我們就來簡單說說每個部分的組成信息。

網絡連接層

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

數據庫服務層

數據庫服務層是整個數據庫服務器的核心,主要包括了系統管理和控制工具、連接池、SQL 接口、解析器、查詢優化器和緩存等部分。

連接池

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

系統管理和控制工具

提供數據庫系統的管理和控制功能,例如對數據庫中的數據進行備份和恢復,保證整個數據庫的安全性,提供安全管理,對整個數據庫的集群進行協調和管理等。

SQL 接口

主要負責接收客戶端發送過來的各種 SQL 命令,并將 SQL 命令發送到其他部分,并接收其他部分返回的結果數據,將結果數據返回給客戶端。

解析樹

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

查詢優化器

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

緩存

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

存儲引擎層

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

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

系統文件層

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

日志文件

MySQL 中的日志主要包括:錯誤日志、通用查詢日志、二進制日志、慢查詢日志等。

錯誤日志

主要存儲的是 MySQL 運行過程中產生的錯誤信息。可以使用下面的 SQL 語句來查看 MySQL 中的錯誤日志。

show variables like  %log_error%

通用查詢日志

主要記錄 MySQL 運行過程中的一般查詢信息,可以使用下面的 SQL 語句來查看 MySQL 中的通用查詢日志文件。

show variables like  %general%

二進制日志

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

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

show variables like  %log_bin%

查看二進制日志的參數

show variables like  %binlog%

查看日志文件

show binary logs;

慢查詢日志

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

查看是否開啟慢查詢日志

show variables like  %slow_query%

查看慢查詢設置的時長

show variables like  %long_query_time%

數據文件

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

db.opt 文件

主要記錄當前數據庫使用的字符集和檢驗規則等信息。

frm 文件

存儲數據表的結構信息,主要是數據表相關的元數據信息,包括數據表的表結構定義信息,每張表都會有一個 frm 文件。

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

MYD 文件

MyISAM 存儲引擎專用的文件格式,主要存放 MyISAM 存儲引擎數據表中的數據,每張 MyISAM 存儲引擎表對應一個.MYD 文件。

MYI 文件

MyISAM 存儲引擎專用的文件格式,主要存放與 MyISAM 存儲引擎數據表相關的索引信息,每張 MyISAM 存儲引擎表對應一個.MYI 文件。

ibd 文件

存放 Innodb 存儲引擎的數據文件和索引文件,主要存放的是獨享表空間的數據和索引,每張表對應一個.ibd 文件。

ibdata 文件

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

ibdata1 文件

MySQL 的系統表空間數據文件,主要存儲 MySQL 的數據表元數據、Undo 日志等信息。

ib_logfile0 和 ib_logfile1 文件

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

配置文件

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

pid 文件

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

socket 文件

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

到此,相信大家對“什么是 MySQL 體系架構”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-27發表,共計3452字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 南京市| 伊宁市| 博乐市| 万载县| 安康市| 融水| 谷城县| 清流县| 石首市| 岑巩县| 汤阴县| 扬州市| 佛学| 寿光市| 河东区| 东山县| 墨玉县| 招远市| 彝良县| 灌云县| 镇远县| 二手房| 扎鲁特旗| 凭祥市| 河北省| 曲周县| 托克托县| 龙岩市| 黄山市| 浦东新区| 吴江市| 全椒县| 鄂伦春自治旗| 北流市| 简阳市| 福安市| 财经| 弥勒县| 大连市| 尼木县| 长治市|