MySQL系列(一):MySQL深入學(xué)習(xí)先導(dǎo)篇之基礎(chǔ)架構(gòu)

作者:z小趙
★一枚用心堅(jiān)持寫原創(chuàng)的“無趣”程序猿,在自身受益的同時(shí)也讓朋友們?cè)诩夹g(shù)上有所提升。
文章目錄
為什么要學(xué)習(xí) MySQL? 本系列的側(cè)重點(diǎn)是什么? 本系列文章學(xué)完之后你能得到什么? 關(guān)于 MySQL 環(huán)境及版本的選擇 本系列文章大綱 MySQL 的安裝及驗(yàn)證 MySQL 的基礎(chǔ)架構(gòu)介紹 總結(jié)
為什么要學(xué)習(xí) MySQL?
目前在使用互聯(lián)網(wǎng)技術(shù)的公司中,幾乎每家公司都會(huì)用到數(shù)據(jù)庫技術(shù)來存儲(chǔ)一些信息。目前市面上用的比較多的主流數(shù)據(jù)庫有 MySQL、Oracle,以及逐漸流行起來的 PostgreSQL;下圖為截止發(fā)稿前各類數(shù)據(jù)庫的排名情況(數(shù)據(jù)來源于 DB-Engines 官網(wǎng))

從圖中可以看出,前 2 名是 Oracle 和 MySQL,可見其應(yīng)用的受歡迎及廣泛使用程度;由于 Oracle 和 MySQL 都是關(guān)系型數(shù)據(jù)庫且 Oracle 不是免費(fèi)的,本系列文章我們重點(diǎn)來講解 MySQL 的相關(guān)原理實(shí)現(xiàn)。
本系列的側(cè)重點(diǎn)是什么?
關(guān)于 SQL 基礎(chǔ)語法不會(huì)做過多講解,如果對(duì) SQL 基礎(chǔ)語法不熟悉的朋友可以在公眾號(hào)后臺(tái)回復(fù) MySQL,下載《SQL 必知必會(huì)》PDF 進(jìn)行自學(xué),也可以通過 Google 方式進(jìn)行自學(xué)。
本系列側(cè)重點(diǎn)是 MySQL 的底層實(shí)現(xiàn)原理、SQL 調(diào)優(yōu)、高性能的索引設(shè)計(jì)、MySQL 集群等等。
本系列文章學(xué)完之后你能得到什么?
了解 SQL 語句執(zhí)行的底層實(shí)現(xiàn)原理,從而寫出更加高效的 SQL 學(xué)會(huì)如何設(shè)計(jì)和使用索引,從而使其效果最大化 學(xué)會(huì)如何構(gòu)建穩(wěn)定的 MySQL 集群 應(yīng)付面試及升職加薪(當(dāng)然,這才是我們的最終目標(biāo))
關(guān)于 MySQL 環(huán)境及版本的選擇
安裝使用環(huán)境:MacBook Pro 10.14.6 MySQL 版本:5.6,選擇該版本原因有二: 作者公司使用的是 5.6,目前庫里單表存儲(chǔ)數(shù)據(jù)量億級(jí)別 網(wǎng)上調(diào)研各大互聯(lián)網(wǎng)公司使用的 5.6 和 5.7 居多
基于以上兩點(diǎn),最終選擇使用 5.6 作為本系列內(nèi)容講解的版本,當(dāng)然也會(huì)介紹一些最新版本下的新特性供大家了解學(xué)習(xí)。
本系列文章大綱
MySQL 安裝及基本架構(gòu)原理介紹 MySQL 的并發(fā)控制和鎖機(jī)制是怎么工作的 MySQL 索引構(gòu)建原理,如果創(chuàng)建出高效的索引 SQL 執(zhí)行原理及優(yōu)化 MySQL 集群搭建及主從同步原理 MySQL 集群的高可用 實(shí)際生產(chǎn)環(huán)境中 MySQL 與緩存是如何配合使用的? MySQL 數(shù)據(jù)備份與恢復(fù)(了解學(xué)習(xí)) ......
以上為本系列文章大綱,當(dāng)然會(huì)隨著文章的逐步講解會(huì)根據(jù)實(shí)際情況進(jìn)行相應(yīng)的調(diào)整(主要是作者寫文章比較隨性,想到比較好的話題會(huì)隨時(shí)插入到系列文章中來)。
MySQL 的安裝及驗(yàn)證
MySQL 下載地址(https://downloads.mysql.com/archives/community/),選擇5.7的dmg版本下載。

安裝,完成后打開系統(tǒng)偏好設(shè)置 -> 點(diǎn)擊 MySQL -> Start MySQL Server


配置環(huán)境變量

驗(yàn)證
查看 MySQL 版本號(hào)

登錄 MySQL 服務(wù)端

查看數(shù)據(jù)庫

到此,MySQL 安裝完成,關(guān)于 MySQL 的語法基本使用,不熟悉的朋友請(qǐng)先看文章開頭下載 PDF 進(jìn)行學(xué)習(xí)。
MySQL 的基礎(chǔ)架構(gòu)介紹

MySQL 整個(gè)架構(gòu)圖如上所示,可以分為三部分。第一部分是客戶端,用于向服務(wù)端發(fā)送請(qǐng)求;第二部分為淡綠色框里面的內(nèi)容:
連接及線程管理模塊:用于管理客戶端請(qǐng)求的,比如檢查驗(yàn)證請(qǐng)求連接的合法性,對(duì)于合法用戶分配處理線程去執(zhí)行任務(wù)等等工作。驗(yàn)證合法性就相當(dāng)于你要回家,但是門上了鎖,你只有擁有正確的鑰匙才能把房門打開進(jìn)去,而分配處理線程去執(zhí)行任務(wù)就相當(dāng)于你回家了讓掃地機(jī)器人幫你掃地,讓電飯煲?guī)湍阒笾啵阒皇侨蝿?wù)的分配者。
緩存:用于存儲(chǔ)被頻繁訪問的熱點(diǎn)數(shù)據(jù)。其作用是用戶請(qǐng)求的數(shù)據(jù)如果在緩存中存在,則直接返回緩存中的數(shù)據(jù),而不需要再去經(jīng)過解析器、優(yōu)化器等操作從存儲(chǔ)引擎中獲取,從而加快了數(shù)據(jù)的讀取速度。(題外話,一般涉及到緩存時(shí),絕大部分情況下是為了提高數(shù)據(jù)的訪問速度)
解析器:用于解析用戶提交的 SQL 語句,分析請(qǐng)求想要做什么樣的事情。用戶一般提交的請(qǐng)求是 CRUD,比如某個(gè)請(qǐng)求是個(gè) Select,則解析器通過解析 SQL 語句,發(fā)現(xiàn)是一個(gè)查詢請(qǐng)求,則接下來就會(huì)進(jìn)行查詢相關(guān)的操作。
優(yōu)化器:用于優(yōu)化或者重寫用戶的請(qǐng)求 SQL。優(yōu)化或者重寫 SQL 就是優(yōu)化器覺得用戶提交的 SQL 不夠高效,優(yōu)化器通過自己的一套邏輯處理后重寫了執(zhí)行相同功能的 SQL 語句,并且其執(zhí)行效率比用戶提交的 SQL 執(zhí)行效率更高。
第三部分是存儲(chǔ)引擎,存儲(chǔ)引擎是用于存儲(chǔ)數(shù)據(jù)進(jìn)行 CRUD 操作后對(duì)數(shù)據(jù)處理結(jié)果進(jìn)行存儲(chǔ)的;不同的存儲(chǔ)引擎實(shí)現(xiàn)的功能也不一樣,比如 InnoDB 存儲(chǔ)引擎實(shí)現(xiàn)了事務(wù)功能,而 MYISAM 存儲(chǔ)引擎并沒有事務(wù)的功能,再比如 InnoBD 存儲(chǔ)引擎對(duì)于并發(fā)操作實(shí)現(xiàn)了行級(jí)鎖,而 MYISAM 存儲(chǔ)引擎是表鎖。常見的存儲(chǔ)引擎有如下:InnoDB、MYISAM、NDB、Memory 等等,文章以 InnoDB 存儲(chǔ)引擎貫穿整個(gè)系列,因?yàn)?InnoDB 在生產(chǎn)環(huán)境中也是使用最多的存儲(chǔ)引擎。存儲(chǔ)引擎究竟實(shí)現(xiàn)了哪些功能呢?這里以 InnoDB 為例:
支持事務(wù)。對(duì)于日常開發(fā)需求中,有些應(yīng)用場景需要聯(lián)動(dòng)多個(gè)資源同時(shí)處理,要么多個(gè)資源同時(shí)處理成功,要么只要有一個(gè)失敗則全體進(jìn)行回滾操作,即是通過事務(wù)的方式將多個(gè)處理動(dòng)作做成一個(gè)原子性操作。
MVCC 機(jī)制。InnoDB采用了行級(jí)鎖,但是為了進(jìn)一步降低鎖資源的競爭程度,采用 MVCC 機(jī)制實(shí)現(xiàn)更高效的并發(fā)操作。
索引機(jī)制。不同引擎實(shí)現(xiàn)的索引機(jī)制各不相同,InnoDB 引擎通過對(duì)主鍵建立索引或者主鍵結(jié)合其他列建立二級(jí)索引,加速數(shù)據(jù)的讀取速度。
可預(yù)測性預(yù)讀策略。InnoDB 通過可預(yù)測性預(yù)讀策略對(duì)磁盤中的數(shù)據(jù)進(jìn)行讀取,然后在內(nèi)存中建立 hash 索引,從而進(jìn)一步提升讀取數(shù)據(jù)的速度。
以上為 InnoDB 引擎的部分常見的特性,通過簡單了解之后能夠?qū)Φ谌龑拥囊婺軌蛳扔袀€(gè)直觀的認(rèn)識(shí)。
總結(jié)
本文主要介紹了為什么要學(xué)習(xí) MySQL,MySQL 的安裝及基本架構(gòu)組成部分的功能介紹,下篇文章我們來深入了解一下 MySQL 的并發(fā)控制和鎖機(jī)制,敬請(qǐng)期待。
數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)概述
歡迎關(guān)注微信公眾號(hào):互聯(lián)網(wǎng)全棧架構(gòu),收取更多有價(jià)值的信息。
