全解MySQL終章:這份爆肝30W字的資料庫寶典贈與有緣的你!

語言: CN / TW / HK

theme: channing-cyan

引言

   年難留,時易損,歲月匆匆,不知不覺中三月時光轉瞬即逝,繼之前的《併發程式設計系列》《JVM虛擬機器系列》後,《全解MySQL專欄》也步入了完結的尾聲。

在早段時間熟悉我的小夥伴應該知道,基本上一月只會更新1~2篇新文,所以前面兩個專欄,共計花費一載有餘的時間才真正更完,但近三個月的時間內,我成為了大家口中“生產隊的驢”,最長不過三天就會發布一篇新文,有時甚至單日內會發布多篇。

字數統計
   因而這三月內,MySQL專欄共計更新近三十個大章,共計32W+字(字數統計來自於掘金編輯器),其中涉及到資料庫進階知識的方方面面,按以往習性,由於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引擎,MyISAMMySQL支援的眾多引擎中屬於“親生子”,而著名的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+以上部落格資料,但這裡無法完全統計就不再羅列。

「其他文章」