女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MySQL的底層原理和技術學習

Linux愛好者 ? 來源:冰河技術 ? 作者:冰河技術 ? 2021-04-06 16:51 ? 次閱讀

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

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

今天一起來學習MySQL的體系架構。

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中的錯誤日志。

showvariableslike'%log_error%';

通用查詢日志

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

showvariableslike'%general%';

二進制日志

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

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

showvariableslike'%log_bin%';

查看二進制日志的參數。

showvariableslike'%binlog%'

查看日志文件。

showbinarylogs;

慢查詢日志

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

查看是否開啟慢查詢日志。

showvariableslike'%slow_query%';

查看慢查詢設置的時長。

showvariableslike'%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體系架構!

文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7239

    瀏覽量

    90963
  • MySQL
    +關注

    關注

    1

    文章

    849

    瀏覽量

    27500

原文標題:一文搞懂MySQL體系架構!

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    京東中臺化底層支撐框架技術分析及隨想

    架構涉及的變化和影響,只是從中臺化演進的思路,及使用的底層支撐技術框架進行分析探討,重點對中臺及前臺協作涉及到的擴展點及熱部署包的底層技術細節,結合京東實際落地情況,對涉及的核心
    的頭像 發表于 04-08 11:29 ?215次閱讀
    京東中臺化<b class='flag-5'>底層</b>支撐框架<b class='flag-5'>技術</b>分析及隨想

    底層開發與應用開發到底怎么選?

    理解計算機系統的底層原理,掌握核心技術。 穩定性與稀缺性:底層開發人才相對稀缺,市場需求穩定,薪資待遇通常較高。 行業基礎:底層開發是整個計算機
    發表于 03-06 10:10

    從Delphi、C++ Builder和Lazarus連接到MySQL數據庫

    ? 從 Delphi、C++ Builder 和 Lazarus 連接到 MySQL 數據庫 MySQL 數據訪問組件(MyDAC)是一個組件庫,提供從 Delphi 和 C++ Builder
    的頭像 發表于 01-20 13:47 ?568次閱讀
    從Delphi、C++ Builder和Lazarus連接到<b class='flag-5'>MySQL</b>數據庫

    使用插件將Excel連接到MySQL/MariaDB

    使用插件將 Excel 連接到 MySQL/MariaDB 適用于 MySQL 的 Devart Excel 插件允許您將 Microsoft Excel 連接到 MySQL 或 MariaDB
    的頭像 發表于 01-20 12:38 ?504次閱讀
    使用插件將Excel連接到<b class='flag-5'>MySQL</b>/MariaDB

    適用于MySQL和MariaDB的.NET連接器

    支持 ORM 的適用于 MySQL 和 MariaDB 的 .NET 連接器 dotConnect for MySQL 是一種高性能 ADO.NET 數據提供程序,可在開發 MySQL 的應用程序
    的頭像 發表于 01-16 14:17 ?369次閱讀
    適用于<b class='flag-5'>MySQL</b>和MariaDB的.NET連接器

    MySQL數據庫的安裝

    MySQL數據庫的安裝 【一】各種數據庫的端口 MySQL :3306 Redis :6379 MongoDB :27017 Django :8000 flask :5000 【二】MySQL 介紹
    的頭像 發表于 01-14 11:25 ?473次閱讀
    <b class='flag-5'>MySQL</b>數據庫的安裝

    MySQL還能跟上PostgreSQL的步伐嗎

    Percona 的老板 Peter Zaitsev最近發表一篇博客,討論了MySQL是否還能跟上PostgreSQL的腳步。Percona 作為MySQL 生態扛旗者,Percona 開發了知名
    的頭像 發表于 11-18 10:16 ?480次閱讀
    <b class='flag-5'>MySQL</b>還能跟上PostgreSQL的步伐嗎

    香港云服務器怎么部署MySQL數據庫?

    在香港云服務器上部署MySQL數據庫的步驟如下: 步驟 1: 更新軟件包列表 首先,確保軟件包列表是最新的。在終端中執行以下命令: sudo apt update 步驟 2: 安裝 MySQL
    的頭像 發表于 11-14 16:15 ?456次閱讀

    詳解MySQL多實例部署

    詳解MySQL多實例部署
    的頭像 發表于 11-11 11:10 ?553次閱讀

    MySQL編碼機制原理

    前言 一位讀者在本地部署 MySQL 測試環境時碰到一個問題,我覺得挺有代表性的,所以寫篇文章介紹一下,看完相信你會對 MySQL 的編碼機制有最本質的了解,本文的目錄結構如下 讀者問題簡介
    的頭像 發表于 11-09 11:01 ?504次閱讀

    適用于MySQL的dbForge架構比較

    dbForge Schema Compare for MySQL 是一種工具,用于輕松有效地比較和部署 MySQL 數據庫結構和腳本文件夾差異。該工具提供了 MySQL 數據庫架構中所有差異的全面視圖。
    的頭像 發表于 10-28 09:41 ?478次閱讀
    適用于<b class='flag-5'>MySQL</b>的dbForge架構比較

    配置MySQL主從復制和讀寫分離

    配置MySQL主從復制和讀寫分離
    的頭像 發表于 10-23 11:44 ?738次閱讀
    配置<b class='flag-5'>MySQL</b>主從復制和讀寫分離

    Jtti:MySQL初始化操作如何設置root密碼

    MySQL初始化時,可以通過以下步驟設置root密碼: 打開命令行工具,使用以下命令啟動MySQL服務: ? sudo service mysql start ? 使用以下命令登錄MySQL
    的頭像 發表于 08-08 16:45 ?695次閱讀

    MySQL知識點匯總

    大家好,這部分被稱為DQL部分,是每個學習MySQL必須要學會的部分,下面就讓我來介紹MySQL中的其他部分。
    的頭像 發表于 08-05 15:27 ?592次閱讀
    <b class='flag-5'>MySQL</b>知識點匯總

    華納云:如何修改MySQL的默認端口

    MySQL是世界上最流行的開源關系型數據庫管理系統之一。在某些情況下,由于安全性、網絡策略或端口沖突的原因,數據庫管理員可能需要更改MySQL服務的默認監聽端口。本文將指導您如何在不同的操作系統上
    的頭像 發表于 07-22 14:56 ?474次閱讀
    華納云:如何修改<b class='flag-5'>MySQL</b>的默認端口