成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文搞懂MySQL體系架構!!!

數據庫 MySQL
作者個人研發的在高并發場景下,提供的簡單、穩定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。

[[385027]]

作者個人研發的在高并發場景下,提供的簡單、穩定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。自開源半年多以來,已成功為十幾家中小型企業提供了精準定時調度方案,經受住了生產環境的考驗。為使更多童鞋受益,現給出開源框架地址:https://github.com/sunshinelyz/mykit-delay

寫在前面

很多小伙伴工作很長時間了,對于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中的錯誤日志。

  1. show variables like '%log_error%'
  • 通用查詢日志

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

  1. show variables like '%general%'
  • 二進制日志

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

  • 查看二進制日志是否開啟。
  1. show variables like '%log_bin%'
  • 查看二進制日志的參數
  1. show variables like '%binlog%' 
  • 查看日志文件
  1. show binary logs; 
  • 慢查詢日志

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

查看是否開啟慢查詢日志

  1. show variables like '%slow_query%'

查看慢查詢設置的時長

  1. 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。

本文轉載自微信公眾號「冰河技術」,可以通過以下二維碼關注。轉載本文請聯系冰河技術公眾號。

 

責任編輯:武曉燕 來源: 冰河技術
相關推薦

2020-09-03 06:35:44

Linux權限文件

2025-01-08 10:30:24

2022-03-24 08:51:48

Redis互聯網NoSQL

2023-11-21 08:37:09

2020-03-18 14:00:47

MySQL分區數據庫

2022-08-31 08:23:27

SAE日志架構

2024-04-12 12:19:08

語言模型AI

2021-03-22 10:05:59

netstat命令Linux

2023-09-08 08:20:46

ThreadLoca多線程工具

2023-09-15 12:00:01

API應用程序接口

2023-09-02 21:27:09

2023-05-22 13:27:17

2021-02-28 20:53:37

Cookie存儲瀏覽器

2023-03-06 21:29:41

mmap技術操作系統

2020-12-07 06:19:50

監控前端用戶

2021-07-08 10:08:03

DvaJS前端Dva

2024-07-12 14:46:20

2022-07-15 08:16:56

Stream函數式編程

2025-01-16 10:38:31

2022-08-15 15:39:23

JavaScript面向對象數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲免费一区二区 | 91高清在线 | 欧美日日| 精品九九 | 日日日操 | 亚洲一区二区三区欧美 | 国产免费一区二区 | 成人在线视频网站 | 国产高清毛片 | 久久久久久久久久久久91 | 国产成人综合在线 | 91香蕉嫩草 | 日本精品一区 | 亚洲综合天堂 | 奇米影视77 | 国产一区二区在线免费视频 | 亚洲精品一级 | 亚洲热在线视频 | eeuss国产一区二区三区四区 | 久久久久久国模大尺度人体 | 久久机热 | 亚洲九色 | 91亚洲国产成人久久精品网站 | 一区二区三区在线观看视频 | 国产成人精品a视频一区www | 亚洲一区二区三区免费在线观看 | 久久久久亚洲精品 | 国产高清免费视频 | 黄色片大全在线观看 | 一区二区三区免费 | 成人小视频在线观看 | 伊人久久综合 | 天堂一区在线观看 | 欧美一区二区三区视频 | 欧美无乱码久久久免费午夜一区 | 国产精品成人一区二区三区夜夜夜 | 亚洲视频免费 | 免费一区| 一级黄色日本片 | 久久久久久久久国产精品 | 久久久91 |