《高性能MySQL》第四版發佈後,收到了很多讀者的反饋,其中關註最多的是作為一個初學者,應該如何能夠較為系統的學習MySQL,從而應對日常工作或者獲得更好的職業發展。於是和多個業內朋友討論後,整理了一些MySQL學習的推薦資源,供初學者參考。 本文分成幾部分,包括業界專家的經驗、推薦書籍、視頻/音頻 ...
《高性能MySQL》第四版發佈後,收到了很多讀者的反饋,其中關註最多的是作為一個初學者,應該如何能夠較為系統的學習MySQL,從而應對日常工作或者獲得更好的職業發展。於是和多個業內朋友討論後,整理了一些MySQL學習的推薦資源,供初學者參考。
本文分成幾部分,包括業界專家的經驗、推薦書籍、視頻/音頻資源、其他資源或者學習方式、MySQL學習溝通群、抽獎贈書等。
業界專家的經驗
提問:剛剛入行時,有哪些資料給你了幫助?
正式接觸 MySQL 是2011年底,當時的公司的資料庫版本主要是 5.5 版本和少量 5.1 版本。因為之前學Oracle的經驗是查看官方文檔,學習MySQL 資料主要是 “官方文檔” 和當時的淘寶DBA團隊組織的技術大學的技術分享,學習MySQL技術的技術特性和經典案例。
其實就現在而言,MySQL 官方文檔依然是最好的學習資料和教材, 裡面非常詳細的說明 MySQL的基礎架構,redo,undo,讀寫邏輯,欄位類型,鎖,存儲引擎,主從複製,MGR ,性能優化等等。把官方文檔通讀一遍,基本上能超越60-70%左右的DBA,為什麼不是更高呢?因為學習技術是為了使用技能。
提問:進一步瞭解 MySQL/資料庫,哪些資料給了你幫助?
換個回答的方式,哪些因素幫助我提升資料庫技能水平?總結起來大概三個方面:
-
掌握基礎知識之後,會有 “紙上來得終覺淺,絕知此事要躬行”” 的想法。基於對各種MySQL 技術知識點和 功能特性的理解,搭建單節點,主備模式環境 做各種功能測試,並且將知識點的驗證或者分析過程下來寫博客,比如死鎖,能將常見的20個死鎖常見分析過程總結下來,相信死鎖問題再也難不倒你了。
-
如果是第一條是模擬考,那麼真實的業務場景則是實戰演練,在海量的業務場景下,層出不窮的業務問題和技術難點驅動 DBA 對 資料庫的使用和限制瞭解的更多。比如:
- truncat表 如何恢復?
- 如果有500g binlog,如何加速 binlog 應用?
- 如何刪除3T的大表?
- 秒殺場景下資料庫設計和優化?
- 如何排查業務訪問db RT異常?
- 為什麼業務寫完立即查詢當時查不到?
- 和優秀的同事或者優秀的人同行,比如有解決不了的疑惑可以咨詢內核開發。
提問:現在回頭來看,哪些資料你覺得是最推薦的,分別對於初入學,和深入學習的人來說?
對於初學者而言,首要目標是 夯實基礎,學好基礎/理論知識。
- 官方文檔
- 《高性能MySQL》
- 《MySQL性能調優與架構設計》
- 《MySQL技術內幕:InnoDB存儲引擎》
對於深入學習的人來說, 單獨的資料庫學習是沒有意義的,必須服務好具體的業務場景才能發揮其價值。推薦:
- 《數據密集型應用系統設計》
- 《性能之巔》
- 《漫畫演算法》
學習和總結各種業務場景下的資料庫架構設計 ,資料庫高可用,容災,強紅包,秒殺,直播彈幕等等。
對於初學者,建議自己手動安裝常見的架構,比如最簡單的一主一備,作為驗證環境。找一些操作案例較多的博客或公眾號文章,照著作者的思路執行。
然後再自己設計一些執行案例,先自己推導結果,再執行驗證,在驗證過程中加深理解或者勘誤。
內核學習也可以延用這個方法,在驗證過程中設想如果是自己實現這個功能的,會怎麼寫,然後通過閱讀源碼理解作者的設計思路。就是看源碼要帶著問題去看,找只要主要流程,GDB去調試單步執行。
推薦的重要學習資料包括:
- MySQL 官方文檔
- 《MySQL 技術內幕:InnoDB 存儲引擎》
- MySQL 周邊組件的文檔與源碼,如percona toolkit、MHA等
- 初學者:丁奇 45 講、MySQL 官方文檔
深入學習:主要還是積累、排錯,雲資料庫相關還是需要看下技術相關的論文。
推薦書籍與資源
MySQL作為當前最流行的關係型資料庫,相關的書籍也非常多,這裡羅列基本推薦如下:
MySQL相關的書籍
文檔是最全面和權威的參考,而其他三本都是,根據豆瓣網友打分進行推薦的。第一本《MySQL是怎樣運行的》適用於完全的初學者,內容由淺到深。第二本《高性能MySQL》則從“優化”為入口,非常系統介紹了MySQL的架構、優化,是一本非常好的進階書籍。第三本是《MySQL技術內幕 InnoDB存儲引擎》,這本書深入的介紹了MySQL核心組件InnoDB存儲引擎,涵蓋了資料庫的事務原理、調度、物理存儲、鎖等知識。
另外,其實MySQL領域還有很多書籍偏重各有不同,這裡不一一推薦了。
1、《MySQL是怎樣運行的》
這本書於2020年出版,是一本比較新的書籍,整個書籍也是圍繞其標題展開《MySQL是怎樣運行的:從根兒上理解 MySQL》。這本書最大的特點是,全書有非常清晰的脈絡,可以說是由“入門到精通”,書中放棄了一定的完整性(這個可以去看MySQL文檔),而是非常接地氣的從零開始,用了很多形象的比喻介紹MySQL資料庫的各個概念。
同時,該書籍在每個章節對相關的概念也都進入了非常深入的討論,例如,關於索引的介紹,從什麼事索引、索引的物理結構開始介紹,然後,開始介紹MySQL的索引在查詢、排序等場景的使用,最後,再介紹一些常見的索引優化技巧,包括普通索引、首碼索引、覆蓋索引等。
總得來說,這本書是最近幾年,面向於初學者非常不錯的一本書。
2、《高性能MySQL》
《高性能MySQL》則從“優化”為入口,將MySQL相關的知識點聚合在一起,包括了查詢性能優化(SQL優化)、高性能索引、庫表結構(Schema)優化等,也包括了伺服器配置(硬體和軟體)優化、架構優化(包括了複製、只讀節點、分片)等,還介紹了部分雲服務商的MySQL等內容,是一本非常適合進階閱讀的書籍。
該書籍的作者、譯者,也都是一直活躍在資料庫領域第一線的資料庫開發者,對於MySQL實踐有著非常豐富經驗。這也保障概書籍整體質量不錯,不僅可以作為系統的閱讀使用,也可以作為一個參考手冊,可以根據自己工作需要,不定期的翻閱其中的部分章節。
3、《MySQL技術內幕 InnoDB存儲引擎》
這本書則以InnoDB為切入點,非常深入的介紹了InnoDB或者說資料庫的原理。InnoDB可以說是MySQL最為核心的組件,其原理不僅僅適用於MySQL,也幾乎適用於大多數關係型資料庫系統。
具體的,概書籍覆蓋的內容包括了MySQL/InnoDB物理存儲結構、索引、鎖、事務等等。本書底層原理為出發點,幫助開發者理解MySQL行為、特點。
本書非常適合,對MySQL已經有一定程度瞭解,又希望更加深入瞭解其底層實現原理的人,或者是工作中需要對MySQL源碼層進行修改或者定製的資料庫內核開發者。
4、用好MySQL官方文檔
MySQL官方文檔可以說是最為權威、更新最為及時、質量也應該是最高的MySQL學習資料了。在早期,市面上還沒有那麼書籍的時候,我個人也是通過精讀MySQL官方文檔,以此為深入學習MySQL、甚至是深入學習資料庫原理的知識庫。
但是,官方文檔為了保證完整性、準確性,會導致其看起來非常冗長、繁瑣,有時候則感覺是在隔靴撓癢,偏向於介紹實現方式或原理以及MySQL提供的功能,而不會介紹讀者最需要的最佳實踐。例如,官方文檔會詳細介紹每個欄位類型和參數詳情,但是不會告訴你,哪些欄位類型應該多用,哪些欄位類型應該少用。
瞭解了官方文檔的這些特性之後,官方文檔閱讀的幾個要點總結如下:
- 在閱讀MySQL官方文檔之前,需要先花些時間瞭解文檔的整體架構,方便後續閱讀查閱;
- 在需要瞭解某個具體MySQL知識點時,建議可以精讀MySQL文檔;
- 如果希望系統的瞭解某個MySQL特效的時候,可以完整的閱讀;
- MySQL文檔MySQL官方文檔最新的都是英文的,需要有一定的英文閱讀能力。
總得來說,多閱讀官方文檔,雖然剛開始會覺得有些晦澀,堅持下來,你會發現收穫巨大。
另外,閱讀官方文檔也要註意:也正是因為官方文檔註重保障完整性、準確性,所以必定會繁瑣、冗長,而不怎麼介紹最佳實踐經驗,甚至一些主流的應用等,例如官方文檔也只會將內容限定在MySQL本身,而不會包括硬體、軟體或者雲環境的相關的內容。
5、視頻/音頻資源
現在也越來越多的人通過視頻的方式去線上的學習各類知識,B站上也有一些面相MySQL初學者的視頻資源,質量我不太好評價,不過作為文字、書籍的補充學習,看一些視頻學習還是非常不錯的。大家可以去B站搜索一下“MySQL 初學者”就有很多的相關視頻了,質量良莠不齊,需要大家自己甄別適合自己的。這裡僅推薦一下由極客時間推出的《MySQL實戰45講》。
該系列價格也非常便宜,可以說是買不了吃虧、買不了上當,反倒是容易買到自己不能全部看完/聽完的懊惱:《MySQL實戰45講》。
其他資源或者學習方式
1、使用Google/Baidu或者ChatGPT
通常,對於某個非常具體的知識點或者行業/場景最佳實踐,在文檔中都不會覆蓋,但是,因為MySQL的用戶量極大,在互聯網上也有非常多的分享和討論,從初階到高階,面相各個級別的內容都有,可以說是一個大寶庫,用好了也是可以事半功倍的。
2、多總結、多分享、多交流
學習本身通常都是無趣的,如果學習的知識不能夠很快的在實際工作中使用,也很容易忘記。另一個非常好的學習方法,不僅僅限於學習MySQL,就是分享很總結。一方面,可以讓你系統的把一個知識點瞭解的比較完整和透徹,也可以幫你更好的記錄,大大加深理解與記憶。
3、學以致用
也許你學習MySQL的原因可能只是因為面試、解決一個工作中的問題、增長知識或者只是興趣,無論是哪個原因促使你學習,動手練習併在工作中使用這些知識,都是非常有效的。如果,你對MySQL或者資料庫很有興趣,那麼則建議在當前的公司,找一個與資料庫更近的崗位工作,這樣自然可以事半功倍。
4、MySQL源代碼
MySQL是一個開源資料庫,另一個獨天得厚的資源是MySQL源代碼。不過,MySQL發展的時間已經非常長了,其代碼複雜度也比較高,可以考慮從一兩個小的模塊、小的功能點著手,去學習、驗證。
5、學術論文
當如果需要瞭解某個具體模塊的來龍去脈以及設計思想的時候,有時候去查找一些經典的資料庫領域論文可以很好的幫助你解決相關的疑問。有一套大部頭《Readings in Database Systems》可以作為參考或者開始,不過內容較多,需要花費大量時間,總得來說不太適合初學者。
小結
對於不同基礎的人,學習的重點和方法是各有不同的,所以本文會列舉主要的MySQL資料庫的學習資源和方法,讀者需要結合自己的實際情況選擇合適的方法。如果你有好的經驗分享,可以在留言評論談談你的經驗。
orczhou 是《高性能MySQL》的書籍的譯者,同時也是來自 NineData(www.ninedata.cloud)的工程師。NineData 向企業、開發者提供高效、安全的資料庫 SQL 開發、資料庫備份、數據複製/遷移/集成、數據對比等功能,是一個 SaaS 服務開箱即用,可以快速提升企業 SQL 開發效率,保障企業數據安全。