全解MySQL終章:這份爆肝30W字的資料庫寶典贈與有緣的你!
theme: channing-cyan
引言
年難留,時易損,歲月匆匆,不知不覺中三月時光轉瞬即逝,繼之前的《併發程式設計系列》、《JVM虛擬機器系列》後,《全解MySQL專欄》也步入了完結的尾聲。
在早段時間熟悉我的小夥伴應該知道,基本上一月只會更新
1~2
篇新文,所以前面兩個專欄,共計花費一載有餘的時間才真正更完,但近三個月的時間內,我成為了大家口中“生產隊的驢”,最長不過三天就會發布一篇新文,有時甚至單日內會發布多篇。
因而這三月內,MySQL
專欄共計更新近三十個大章,共計32W+
字(字數統計來自於掘金編輯器),其中涉及到資料庫進階知識的方方面面,按以往習性,由於MySQL
專欄的內容頗多,這裡也列出總綱便於諸君翻閱。
全解MySQL目錄
- (一)《全解MySQL之架構篇:自頂向下深入剖析MySQL整體架構!》
- (二)《全解MySQL:一條SQL語句從誕生至結束的多姿多彩歷程!》
- (三)《MySQL之庫表設計篇:一、二、三、四、五正規化、BC正規化與反正規化詳解!》
- (四)《MySQL之索引初識篇:索引機制、索引分類、索引使用與管理綜述》
- (五)《MySQL索引應用篇:建立索引的正確姿勢與使用索引的最佳指南!》
- (六)《MySQL索引原理篇:深入資料庫底層揭開索引機制的神祕面紗》
- (七)《MySQL事務篇:ACID原則、事務隔離級別及事務機制原理剖析》
- (八)《MySQL鎖機制:高併發場景下該如何保證資料讀寫的安全性?》
- (九)《MySQL之MVCC機制:為什麼你改了的資料我還看不見?》
- (十)《全解MySQL之死鎖問題分析、事務隔離與鎖機制的底層原理剖析》
- (十一)《MySQL日誌篇之undo-log、redo-log、bin-log.....傻傻分不清》
- (十二)《MySQL之記憶體篇:深入探尋資料庫記憶體與Buffer Pool的奧妙》
- (十三)《MySQL引擎篇:半道出家的InnoDB為何能替換官方的MyISAM?》
- (十四)《全解MySQL之各方位事無鉅細的剖析儲存過程與觸發器》
- (十五)《MySQL命令大全:以後再也不用擔心忘記SQL該怎麼寫啦~》
- (十六)《MySQL調優篇:單機資料庫如何在高併發場景下健步如飛?》
- (十七)《SQL優化篇:如何成為一位寫優質SQL語句的絕頂高手!》
- (十八)《MySQL排查篇:該如何定位並解決線上突發的Bug與疑難雜症?》
- (十九)《MySQL之表分割槽篇:漲知識了!攜手共探鮮為人知的表分割槽!》
- (二十)《MySQL特性篇:2022年的我們,必須要懂的那些資料庫新技術!》
- (二十一)《MySQL之高併發大流量情況下海量資料分庫分表的正確姿勢》
- (二十二)《全解MySQL之分庫分表後帶來的“副作用”一站式解決方案!》
- (二十三)《MySQL分表篇:該如何將月增上億條資料的單表處理方案優雅落地?》
- (二十四)《全解MySQL之主從篇:死磕主從複製中資料同步原理與優化》
- (二十五)《MySQL主從實踐篇:超詳細版讀寫分離、雙主熱備架構搭建教學》
- (二十六)《MySQL分庫篇:Sharding-Sphere分庫分表框架的保姆級教學!》
- (二十七)《舞動手指速寫一個Seata-AT框架解決棘手的分散式事務問題》
- (二十八)《MySQL面試通關祕籍:這次你也可以在簡歷寫上精通MySQL!》
這裡先附上《全解MySQL專欄》的大章目錄,接著再簡單介紹一下每個章節,大家可根據各個章節的簡介,根據自己缺乏的知識點去選擇性閱讀。
全解MySQL總綱
不識廬山真面目,只緣身在此山中,這句古詩相信諸位並不陌生,其內在含義是指:想要研究明白某個事物,開始不能拘泥於某個細節,必須先站在上帝的視角縱觀全貌,認識了大體梗概後,再去深入到每個細枝末節做研究,因此自頂向下全解MySQL
架構則作為了系列的開篇:
- (一)《全解MySQL之架構篇:自頂向下深入剖析MySQL整體架構!》
從巨集觀上介紹了MySQL
資料庫的整體架構後,雖然對MySQL
底層有了一定認知,但缺乏形象化的理解,所以第二章中,分別站在SQL
語句執行的角度上,化身一條讀取語句、以及一條寫入語句,切身感受了資料庫執行過程中,各個層面對語句會做什麼操作:
- (二)《全解MySQL:一條SQL語句從誕生至結束的多姿多彩歷程!》
在設計MySQL
的庫表結構時,很多時候我們都是率性而為,開發時程式碼敲著敲著發現結構不合理,又會去重構表、甚至大面積重構庫結構,那在設計庫表時有沒有一套合理的設計方法論呢?答案是有的,庫表設計篇中則詳細講到了資料庫結構設計的一些方法論,即資料庫正規化與反正規化設計:
- (三)《MySQL之庫表設計篇:一、二、三、四、五正規化、BC正規化與反正規化詳解!》
學習了設計庫表結構的一些方法論後,接著來聊聊資料庫系統中的一個重要角色:索引,但索引的分類五花八門,索引的稱呼千奇百怪,對於MySQL
的索引機制,到底該如何建立一個系統化的體系呢?索引初識篇則從索引的基本認知出發,全解MySQL
的索引體系:
- (四)《MySQL之索引初識篇:索引機制、索引分類、索引使用與管理綜述》
對索引機制建立出系統化的體系後,但大家建立的索引真的合格嗎?使用索引時的方式真的正確嗎?索引應用篇則攜手諸位,共探建立索引的正確姿勢與使用索引的最佳指南!讓你對索引的建立與使用,更加得心應手~: - (五)《MySQL索引應用篇:建立索引的正確姿勢與使用索引的最佳指南!》
經過前面兩章關於索引的學習後,大家已經對索引有了很高的掌握度,但MySQL
的索引機制,自始至終對於我們都是一個黑盒般的存在,我們並不清楚建立索引後MySQL
會發生什麼,也並不清楚使用索引查詢時會如何檢索資料,而在索引原理篇中,則會以動畫的形式詳解MySQL
索引的底層實現:
- (六)《MySQL索引原理篇:深入資料庫底層揭開索引機制的神祕面紗》
MySQL
的核心是儲存資料,是整個業務系統中最重要的一層,可謂是整個應用程式的“大本營”,因此只要MySQL
存在些許隱患,對整個系統都是致命的,那MySQL
在接收外部資料寫入時,有沒有可能會發生問題呢?接著在MySQL
事務篇中,詳細講到了資料不一致問題,以及事務機制的方方面面:
- (七)《MySQL事務篇:ACID原則、事務隔離級別及事務機制原理剖析》
理解了基本的事務機制後,MySQL
內部會採用多執行緒執行SQL
語句,不過多執行緒雖然效能優異,但在高併發情況下也會帶來一系列隱患問題,而MySQL
在併發讀寫時,是如何保障資料安全性的呢?這就引出了MySQL
的鎖機制:
- (八)《MySQL鎖機制:高併發場景下該如何保證資料讀寫的安全性?》
增、刪、改是資料庫中十分常見的操作,但為什麼一個事務對一條資料進行變更操作後,另外一個事務卻看不見呢?這背後的一切究竟是何原理?MVCC
篇中則會與諸位詳聊MVCC
多版本併發控制技術:
- (九)《MySQL之MVCC機制:為什麼你改了的資料我還看不見?》
對MySQL
事務與鎖機制有了全面認知後,但事務隔離與鎖機制底層究竟是怎樣實現的呢?對於這塊似乎很少有資料去講,而事務與瑣原理篇中,會深入底層真正揭開事務與鎖機制的神祕面紗:
- (十)《全解MySQL之死鎖問題分析、事務隔離與鎖機制的底層原理剖析》
學習了MySQL
資料庫的事務、鎖、MVCC
機制這些併發知識後,緊接著會聊聊它的日誌體系,任何專案都會有日誌,MySQL
也不例外,其日誌種類繁多,如撤銷日誌、重做日誌、錯誤日誌、慢查詢日誌、中繼日誌、二進位制日誌.....,日誌篇則打算全解MySQL
中的各類日誌,將不同日誌間的關係徹底理清楚~:
- (十一)《MySQL日誌篇之undo-log、redo-log、bin-log.....傻傻分不清》
MySQL
會基於磁碟工作,這句話幾乎刻在了每個後端程式設計師DNA
裡,但答案的確如此嗎?其實並不能蓋棺定論,因為在MySQL
實際執行時,尤其是InnoDB
引擎的表,幾乎會將所有操作都放會在記憶體中完成,啥?基於記憶體?為啥呢?記憶體篇中會帶諸位一探究竟:
- (十二)《MySQL之記憶體篇:深入探尋資料庫記憶體與Buffer Pool的奧妙》
MySQL
設計的引擎層是可拔插式的,而官方在最初也傾盡心血打造了MyISAM
引擎,MyISAM
在MySQL
支援的眾多引擎中屬於“親生子”,而著名的InnoDB
則是由第三方研發的“外來子”,但為何InnoDB
在後來成了預設引擎?背後的這一場“奪嫡大戲”,究竟是MySQL
始亂終棄,還是InnoDB
實力過硬?引擎篇中則會細說這背後不為人知的內幕:
- (十三)《MySQL引擎篇:半道出家的InnoDB為何能替換官方的MyISAM?》
儲存過程相信大家都聽說過,在實際開發中卻很少有用到,但有時它卻能夠給咱們帶來意料不到的額外收穫,不過很多小夥伴對於這塊知識缺乏掌握,因此接下來會重點講述MySQL
的儲存過程與觸發器:
- (十四)《全解MySQL之各方位事無鉅細的剖析儲存過程與觸發器》
編寫SQL
語句時,明明記得有個命令/函式可以實現需要的功能,但偏偏不記得該怎麼寫,這時只能靠盲目的去百度來尋找,這難免顯得有些呆呆的,而接下來這章則將羅列2000+
條常用命令和函式,徹底打造一個MySQL
命令大全:
- (十五)《MySQL命令大全:以後再也不用擔心忘記SQL該怎麼寫啦~》
在如今IT
開發行業中,系統訪問量日漲、併發暴增、線上瓶頸等各種效能問題紛湧而至,資料庫的讀寫上限成為了系統中新的瓶頸,而效能優化則成為了現時代中一個炙手可熱的名詞,無論是在開發、面試過程中,效能優化都是一個常談常新的話題...,調優篇中則會詳解MySQL
各方面的調優小技巧:
- (十六)《MySQL調優篇:單機資料庫如何在高併發場景下健步如飛?》
除開基本的調優技巧外,咱們編寫SQL
語句時也值得刻意注意,寫好滿足業務需求的SQL
不難,但寫出效能優異的SQL
卻並非易事,成為一名把業務SQL
寫的又快又好的高手,這裡面需要一定的基本功和技巧,如若你只停留在滿足業務需求即可的程度,那SQL
優化篇可助你快速打破瓶頸,成為一位人見人誇的絕頂高手:
- (十七)《SQL優化篇:如何成為一位寫優質SQL語句的絕頂高手!》
經過前面兩章實操篇的教學後,MySQL
線上會出現的疑難雜症也不容小視,資料查詢慢、CPU100%
、磁碟100%
、客戶端連線異常、死鎖問題頻發.....等各類問題,這背後到底怎麼回事!出現時又該如何排查,閱讀完下述篇章後,相信你的心中能夠得到答案:
- (十八)《MySQL排查篇:該如何定位並解決線上突發的Bug與疑難雜症?》
分庫分表大家都聽說過,但表分割槽這個概念卻鮮為人知,分割槽技術是指建立在不拆分表的基礎上,將資料劃分到多個物理分割槽中,從而改善整體的表效能,表分割槽篇中則與諸位攜手共探鮮為人知的表分割槽技術: - (十九)《MySQL之表分割槽篇:漲知識了!攜手共探鮮為人知的表分割槽!》
對於技術新特性,這是諸多開發者下意識會忽略的地方,如Java
最新發布了Java19
,但絕大多數小夥伴的認知卻依舊停留在Java8
,而MySQL
最新發行了8.0.29
版本,也包括期間推出許多新技術也鮮為人知!在MySQL
不同的版本,其效能可謂是真正的天差地別,如果這些你還未曾瞭解,特性篇中則能夠給出一份完美的答卷:
- (二十)《MySQL特性篇:2022年的我們,必須要懂的那些資料庫新技術!》
高併發處理是面試中一個百問不厭的問題,資料庫也一直是業務系統的核心,因此想要掌握高併發處理經驗,處理好資料庫的大流量併發問題是永遠繞不開的話題,分庫分表篇中,會詳細展開敘述資料庫分庫分表的核心方法論: - (二十一)《MySQL之高併發大流量情況下海量資料分庫分表的正確姿勢》
分庫分表後對資料庫的效能提升,用一個字形容,那就是爽!分庫分表能讓資料儲存層真正成為高效能、高可用、高穩定的三高架構,但爽歸爽,其帶來後患問題也是無窮的,跨庫Join
問題、聚合函式不可用、分散式事務問題、主鍵唯一性問題、資料分頁問題、節點擴容問題、多維度查詢問題.......,分庫分表後產生的這一系列問題,到底是怎麼回事,又該如何解決呢?下述這篇會給出了答案:
- (二十二)《全解MySQL之分庫分表後帶來的“副作用”一站式解決方案!》
單日一張表的資料暴增幾十萬、幾百萬甚至上千萬時,這遠超出傳統單表的效能極限,此時該如何處理呢?庫內分表篇會結合真實的線上業務,全面闡述單表資料增長過快的優雅處理方案: - (二十三)《MySQL分表篇:該如何將月增上億條資料的單表處理方案優雅落地?》
主從複製是一種十分常見的高可用手段,MQ、Redis、ES、ZK、Kafka....
等任何技術棧都會支援對應實現,而MySQL
也同樣不例外,但資料庫的主從複製技術底層是咋實現的?主從原理篇中將深入進行探討:
- (二十四)《全解MySQL之主從篇:死磕主從複製中資料同步原理與優化》
上一章節中講明白了主從叢集的概念和原理,但主從讀寫分離、雙主雙寫熱備這些高可用方案,又該如何具體落地呢?主從實踐篇中,會帶來一套手摸手版超詳細的搭建教學: - (二十五)《MySQL主從實踐篇:超詳細版讀寫分離、雙主熱備架構搭建教學》
在前面兩章關於分庫分表的章節中,講明白了分庫分表的方法論,以及產生的後患問題該如何解決,但這類講分庫分表概念的文章比比皆是,真正帶人落地實踐資料相對較少,而分庫分表實踐篇中會基於最新的Sharding-Sphere5.2.1
技術棧,逐步講解分庫分表的完整性實戰:
- (二十六)《MySQL分庫篇:Sharding-Sphere分庫分表框架的保姆級教學!》
分散式事務問題是分散式系統中一個頭疼的問題,這也是分庫分表後不得不解決的一個疑難雜症,但現如今可以引入成熟的框架,如Seata
解決,但為何這些框架僅靠一個註解、幾行配置就能解決令人頭大的分散式事務問題呢?分散式事務篇中會一步步手寫框架理解背後的原理:
- (二十七)《舞動手指速寫一個Seata-AT框架解決棘手的分散式事務問題》
前面叨叨絮絮了許多,講述的內容中既有概念方法論,也有實操實踐的經驗分享,亦有底層原理的詳細剖析,兜兜轉轉下來寫的內容不算多,但也不算少,這對於一些想要面試前快速突擊的小夥伴而言,屬實並不太友好,因此在MySQL
系列的結尾中,對整個系列所有章節的內容,進行了核心知識點提煉,最終撰寫出了一篇面試寶典:
- (二十八)《MySQL面試通關祕籍:這次你也可以在簡歷寫上精通MySQL!》
經過這麼多篇章的學習後,有人也許會問,學完能夠達到精通的層次嗎?精通這個詞彙,對於每個做技術的小夥伴而言,是額外懼怕的詞彙,幾乎很少有人敢說自己精通某個技術棧,但我想說的是:如果你對某個技術棧的掌握度,能夠超過
80~90%
的同行,那你就具備在簡歷上寫精通的底氣!
至此,MySQL
專欄就勉強畫上了結束的句號,認真閱讀上述各個篇章後,也絕對能夠助力大家達到“精通”的水準!至少面試過程中、與同事討論過程中、與群友吹水過程中.....,你能夠回答上來別人問的,而且也能知道別人不知道的,這也就達到了所謂的“精通”層次。
同時,如果感覺我的文章對你有些許幫助,歡迎點贊、評論、收藏與關注喲~
參考書籍與資料
- 《MySQL必知必會》
- 《高效能MySQL》
- 《MySQL技術內幕》
- 《MySQL排錯指南》
- 《資料庫索引設計與優化》
- 《深入理解MySQL核心技術》
- 《MySQL效能調優與架構設計》
- 《深入淺出MySQL》
- 《資料庫系統實現》
上述幾本是之前個人看過的MySQL
書籍,撰寫MySQL
專欄中的內容時,多多少少有參照其中的章節內容,同時也參考了例如尚矽谷、B
站的視訊教學,以及1000+
以上部落格資料,但這裡無法完全統計就不再羅列。
- 全解MySQL終章:這份爆肝30W字的資料庫寶典贈與有緣的你!
- 追憶四年前:一段關於我被外企CTO用登入註冊吊打的不堪往事
- (十一)Netty實戰篇:基於Netty框架打造一款高效能的IM即時通訊程式
- (四)MySQL之索引初識篇:索引機制、索引分類、索引使用與管理綜述
- (九)MySQL之MVCC機制:為什麼你改了的資料我還看不見?
- (十)全解MySQL之死鎖問題分析、事務隔離與鎖機制的底層原理剖析
- (二十八)MySQL面試通關祕籍:這次你也可以在簡歷寫上精通MySQL!
- (一)全解MySQL之架構篇:自頂向下深入剖析MySQL整體架構!
- (九)Java網路程式設計無冕之王-這回把大名鼎鼎的Netty框架一網打盡!
- (八)MySQL鎖機制:高併發場景下該如何保證資料讀寫的安全性?
- (十五)MySQL命令大全:以後再也不用擔心忘記SQL該怎麼寫啦~
- (七)MySQL事務篇:ACID原則、事務隔離級別及事務機制原理剖析
- 深入理解SpringMVC工作原理,像大牛一樣手寫SpringMVC框架
- (三)MySQL之庫表設計篇:一、二、三、四、五正規化、BC正規化與反正規化詳解!
- (五)MySQL索引應用篇:建立索引的正確姿勢與使用索引的最佳指南!
- (六)MySQL索引原理篇:深入資料庫底層揭開索引機制的神祕面紗!
- (五)網路程式設計之流量接入層設計:基於效能怪獸從零構建日均億級吞吐量的閘道器架構!
- (四)網路程式設計之請求分發篇:負載均衡靜態排程演算法、平滑輪詢加權、一致性雜湊、最小活躍數演算法實踐!
- (三)Nginx一網打盡:動靜分離、壓縮、快取、黑白名單、跨域、高可用、效能優化...想要的這都有!
- Redis綜述篇:與面試官徹夜長談Redis快取、持久化、淘汰機制、哨兵、叢集底層原理!