標籤:

如何系統學習 MySQL?

我的問題:如何「系統」學習mysql?

比如需要看哪些書籍,哪些資料?我曾研讀過以下幾本書:《高性能mysql》,簡朝陽的mysql優化,innodb存儲引擎。我個人感覺前兩本是告訴讀者知其然,第三本是告訴讀者所以然。這三本書是有一種漸進的關係的,如果沒有前兩本的積累和一定的工作經驗,直接看第三本的效果是不太好的。

學習資料庫知識,或者狹義說學習mysql,其學習過程比較曲折,沒人誰能告訴你,只要看過某幾本書,掌握好哪些知識就算是精通、掌握mysql了。知識面是非常廣,知識點是零散的,不像學習編程語言那麼系統、那麼直接明了。

這也是我感覺比較迷茫的地方,怎樣才能系統學習?現在我工作之餘有空就在閱讀英文版的官方參考手冊,一則培養看英文技術文檔的能力,二則希望通過官方文檔來系統學習,不希望只通過一兩篇技術文檔、一兩個案例這樣零散的學習方式。


允許晚輩叫一聲前輩。

從前輩的描述中可以看出前輩對MySQL已經有很好的理解,但我還是想從我這個半知半解的晚輩角度提出幾點。

1.系統學習資料庫,最要緊的是把基本功打牢,所以《資料庫系統概念 原書第六版》是一本不可多得的好書,任何資料庫背後的原理基本上都是想通的,其他的都是不同廠商或組織做的改進和優化;

2.如果對MySQL題體系結構、原理性的東西沒搞明白,就閱讀優化相關的書,我覺得是徒勞,因為原理不懂,何談優化?所以這裡可以推薦兩本本書籍:《深入理解MySQL》(人民郵件出版社 Charles A Bell著 楊濤等譯)、《深入理解MySQL核心技術》(O"REILLY出版社 中國電力出版社 Sasha Pachev著 李芳等譯);

3.對原理性的東西弄徹底後,再加上足夠多的操練,現在可以看些優化、高可用、備份與恢復、集群、優化的書,比如前輩提到的《高性能MySQL》(O"REILLY出版社 電子工業出版社 Baron Schwartz等著 王小東等譯)、《MySQL性能調優與架構設計》(簡朝陽),其他的書籍比如《高可用MySQL——構建健壯的數據中心》(O"REILLY出版社 電子工業出版社 Charles Bell等著 寧青等譯)……(歡迎補充)

4.再深層次可以研究下MySQL源碼,內部實現機制等等。這裡我也不知路向;

5.Linux方面的知識想必前輩已經非常熟練,在此不贅述。

下面貼兩個帖子,一個是「知名DBA專家馮春培先生分享自己的職業之路」中的片段,另一個是「如何理解高級MySQL DBA必備素養以及技能」的片段。希望對前輩有所幫助。

hwayw: 現在有人認為學oracle很有出路,有人認為學mysql前途更大,還有人覺得nosql才是未來的資料庫趨勢,您是怎麼看待這樣的觀點?有關關係型資料庫和非關係型資料庫的爭議,您又怎麼看?

biti_rainy: 我學習oracle的時候oracle資料庫還為廣泛應用,DBA也比較少,算是懵懂的在正確的時間進了正確的門。2001年到2006年真的是DBA學習成長的黃金時期,那時候湧現了一堆有影響力的人。這不是說現在的oracle DBA技能就比那時候的差,而是現在的確算不上黃金時期了,因為oracle已經廣泛應用了。但是現在這個時段就是做資料庫服務的好時期,而我們那時候想做卻不成氣候。2006年的時候我招了個應屆生叫簡朝陽,後來我建議他重點學習mysql,並給予了很大的自由度和計划到他,幫助他成長,後來他寫了本書,同時自己成長的非常快,在mysql領域也是非常有影響力。當時之所以建議他學習mysql,是因為oracle的硬體實施整體成本非常高,一用上小型機和SAN存儲,oracle費用其實不足total費用的20%。一方面為了公司節約成本考慮,另一方面也感覺到這是未來的趨勢,大環境給予了他這個機遇,而我只是提前做出了判斷並引導了他。現在由於互聯網企業的發展,好像nosql發展的迅猛,這其實不過是在特定場景解決特定問題罷了。我認為未來十年nosql可以取代RDBMS是個偽命題,其實發展到後來兩者趨勢逐漸一致,nosql想要通用也得具有RDBMS的很多特徵,就越長越像了。Google最近出的資料庫,其實我看很多特點和概念也類似oracle呢,概念上大家都沒什麼新鮮玩意,都是在規模上的量變導致質變。而一般用戶解決規模問題最簡單的是硬體、網路的突破,這更容易帶來資料庫應用的發展。所以我更主張大家透過現象去看技術的實質,研究各種技術的特點背後的優劣到底是怎麼回事,這樣才有自己的看法。Oracle、mysql、nosql都是一些具體的數據管理的表現形式,他們主要面對什麼客戶、解決什麼問題、帶來什麼價值,看透了這些,我們就不會被表象所牽引。當然,我認為管理好數據之後,發掘數據價值是一個很重要的事情。

From ITPUB名人堂第16期支付寶數據平台負責人、知名DBA專家馮春培先生分享自己的職業之路_Oracle資料庫管理_ITPUB論壇-it168旗下專業技術社區

黃杉

1) MYSQL 重要參數的作用; 包括副作用哪些呢? 是key_buffer_size、tmp_table_size、sort_buffer_size、innodb_buffer_size、innodb_log_file_size、innodb_flush_logs_at_trx_commit、max_tmp_tables 等等!

2) SHELL,要熟練; shell具體指的是啥,能否舉例說明一本書籍,說搞懂了這本書籍,shell就算熟練了?

3) PYTHON , PERL 懂一種。 不懂,看來還得去買一本書,慢慢修鍊了。

4) 性能測試要會; 沒有弄過,如何做,用啥工具,如何看測試過後的各種測試數據。

5) LINUX 熟練操作; linux操作都包括哪些方面呢?能舉幾個例子說明一下嗎?

From 如何理解高級MySQL DBA必備素養以及技能?_MySQL及其它開源資料庫_ITPUB論壇-it168旗下專業技術社區

2013年10月7日16:18:27 補充

還可以看下這個問題我的回答:MySQL 學習路線是怎樣的?有哪些學習資料或網站推薦?


建議:

1.堅持閱讀官方手冊,看MySQL書籍作用不會特別大;(挑選跟工作相關的內容優先閱讀,例如InnoDB存儲引擎,MySQL複製,查詢優化)

2.閱讀官方手冊,同時對閱讀的內容做對應的測試;

3.結合你現在的工作內容,多實戰即可;

4.外部的BLOG ,也包過我的 http://mysqlops.com 只是作為參考即可,更多要培養自己的分析思考的模式;

備註:

國內人寫的MySQL書籍都不要作為重點,包過我可能2014年出版一本關於MySQL的書籍,推薦大家只作為輔助的,可以上廁所的時候看看,堅持官方手冊+測試+實戰+思考總結為主的模式。


花三個月時間把我這個問題 https://www.zhihu.com/question/28385400/answer/87729818 下推薦的書看完,相信任何一個人,認真學完這些書(有些書籍看一遍應該也是看不懂的,需要看多遍),再實踐書中一些例子,甚至對MySQL進行簡單的修修改改。完成以後,大家對自己的MySQL一定會很有信心的。

這裡推薦的書籍,慢一點的話半年時間應該能夠全部學完,如果學不完,我推薦你看看《如何閱讀一本書 (豆瓣)》

為了便於大家查看,附上原答案:

對於想在資料庫層面深入的朋友,我這裡推薦幾本MySQL的好書,應該能夠有效避免學習MySQL的彎路,並且達到一個不錯的水平。

我這裡推薦的書或材料分為兩個部分,分別是MySQL的使用和MySQL的源碼學習。在介紹的過程中,我會穿插簡單的評語或感想。

1.MySQL的使用

1.1 MySQL技術內幕:InnoDB存儲引擎

學習MySQL的使用,首推姜承堯的《MySQL技術內幕:InnoDB存儲引擎》,這本書確實做到了由漸入深、深入淺出,是中國人寫的最贊的MySQL技術書籍,符合國人的思維方式和閱讀習慣,而且,這本書簡直就是面試寶典,對於近期有求職MySQL相關崗位的朋友,可以認真閱讀,對找工作有很大的幫助。當然,也有人說這本書入門難度較大,這個就自己取捨了,個人建議就以這本書入門即可,有不懂的地方可以求助官方手冊和google。

1.2 MySQL的官方手冊

我剛開始學習MySQL的時候誤區就是,沒有好好閱讀MySQL的官方手冊。例如,我剛開始很難理解InnoDB的鎖,尤其是各個情況下如何加鎖,這個問題在我師弟進入百度做DBA時,也困擾了他一陣子,我們兩還討論來討論去,其實,MySQL官方手冊已經寫得清清楚楚,什麼樣的SQL語句加什麼樣的鎖,當然,MySQL的官方手冊非常龐大,一時半會很難看完,建議先看InnoDB相關的部分。

http://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html

1.3 MySQL排錯指南

《MySQL排錯指南》是2015年夏天引入中國的書籍,這本書可以說是DBA速成指南,介紹的內容其實比較簡單,但是也非常實用,對於DBA這個講究經驗的工種,這本書就是傳授經驗的,可能對有較多工作經驗的DBA來說,這本書基本沒有什麼用,但是,對於剛入職場的新人,或學校里的學生,這本書會有較大的幫助,非常推薦。

1.4 高性能MySQL

《高性能MySQL》是MySQL領域的經典之作,擁有廣泛的影響力,學習MySQL的朋友都應該有所耳聞,所以我就不作過多介紹,唯一的建議就是仔細看、認真看、多看幾遍,我每次看都會有不小的收穫。這就是一本雖然書很厚,但是需要一頁一頁、一行一行都認真看的書。

1.5 資料庫索引設計與優化

如果認真學習完前面幾本書,基本上都已經對MySQL掌握得不錯了,但是,如果不了解如何設計一個好的索引,仍然不能成為牛逼的DBA,牛逼的DBA和不牛逼的DBA,一半就是看對索引的掌握情況,《資料庫索引設計與優化》就是從普通DBA走向牛逼DBA的捷徑,這本書在淘寶內部非常推崇,但是在中國名氣卻不是很大,很多人不了解。這本書也是今年夏天剛有中文版本的,非常值得入手以後跟著練習,雖然知道的人不多,豆瓣上也幾乎沒有什麼評價,但是,強烈推薦、吐血推薦!

1.6 Effective MySQL系列

《Effective MySQL系列》是指:

  • Effective MySQL Replication Techniques in Depth
  • Effective MySQL之SQL語句最優化
  • Effective MySQL之備份與恢復

這一系列並不如前面推薦的好,其中,我只看了前兩本,這幾本書只能算是小冊子,如果有時間可以看看,對某一個」模塊」進入深入了解。

2.MySQL的源碼

關於MySQL源碼的書非常少,還好現在市面上有兩本不錯的書,而且剛好一本講server層,一本講innodb存儲引擎層,對於學習MySQL源碼會很有幫助,至少能夠更加快速地了解MySQL的原理和宏觀結構,然後再深入細節。此外,還有一些博客或PPT將得也很不錯,這裡推薦最好的幾份材料。

2.1 InnoDB - A journey to the core

《InnoDB - A journey to the core》 是MySQL大牛Jeremy Cole寫的PPT,介紹InnoDB的存儲模塊,即表空間、區、段、頁的格式、記錄的格式、槽等等。是學習Innodb存儲的最好的材料。感謝Jeremy Cole!

2.2 深入MySQL源碼

登博的分享《深入MySQL源碼》,相信很多想了解MySQL源碼的朋友已經知道這份PPT,就不過多介紹,不過,要多說一句,登博的參考資料里列出的幾個博客,都要關注一下,乾貨滿滿,是學習MySQL必須關注的博客。

2.3 深入理解MySQL核心技術

《深入理解MySQL核心技術》是第一本關於MySQL源碼的書,著重介紹了MySQL的Server層,重點介紹了宏觀架構,對於剛開始學習MySQL源碼的人,相信會有很大的幫助,我在學習MySQL源碼的過程中,反覆的翻閱了幾遍,這本書剛開始看的時候會很痛苦,但是,對於研究MySQL源碼,非常有幫助,就看你是否需要,如果沒有研究MySQL源碼的決心,這本書應該會被唾棄。

2.4 MySQL內核:InnoDB存儲引擎

我們組的同事寫的《MySQL內核:InnoDB存儲引擎》,可能宇宙範圍內這本書就數我學得最認真了,雖然書中有很多編輯錯誤,但是,平心而論,還是寫得非常好的,相對於《深入理解MySQL核心技術》,可讀性更強一些,建議研究Innodb存儲引擎的朋友,可以了解一下,先對Innodb有一個宏觀的概念,對大致原理有一個整體的了解,然後再深入細節,肯定會比自己從頭開始研究會快很多,這本書可以幫助你事半功倍。

2.5 MySQL Internals Manual

《MySQL Internals Manual》相對於MySQL Manual來說,寫的太粗糙,誰讓人家是官方文檔呢,研究MySQL源碼的時候可以簡單地參考一下,但是,還是不要指望文檔能夠回答你的問題,還需要看代碼才行。

http://dev.mysql.com/doc/internals/en/

2.6 MariaDB原理與實現

《MariaDB原理與實現》我也買了一本,還不錯,MariaDB講的並不多,重點講了Group Commit、線程池和複製的實現,都是MySQL Server層的知識,對MySQL Server層感興趣的可以參考一下。

3. 後記

希望這裡推薦的材料對學習MySQL的同學、朋友有所幫助,也歡迎推薦靠譜的學習材料,大家共同進步。


0、導讀

本文主要寫給那些立志成為MySQL DBA,以及正在學習MySQL的同行們,結合個人及業內其他同行的職業發展經歷給大家一些參考,如何成為合格的MySQL DBA。

1、什麼是MySQL DBA

首先,DBA是database administrator(資料庫管理員)的簡稱,在一些招聘網站上,也可能會把職位寫成資料庫[管理]工程師,MySQL DBA是目前互聯網企業中最為炙手可熱的崗位需求之一,前(錢)景大好,快到碗里來吧。

2、MySQL DBA的職責

傳統意義上的DBA基本上只要管好database system就可以,一般無需關注操作系統、硬體、網路、安全、NOSQL等相關技術細節,在一些傳統企業或者操作集成商里的ORACLE DBA就是這樣的,最多關注到主機(小機為主)及相應的存儲設備。

而MySQL一般在互聯網業務中使用,MySQL DBA需要關注的方面也相應更多了,主要就是上面提到的主機硬體、OS、網路、安全、NOSQL,以及一些MySQL運維自動化開發(這不奇怪,一個好平台,通常都要自己親自開發才順手)的工作。

此外,隨著企業規模的變化,可能在公司初期是由一些比較資深的開發工程師負責所有伺服器大小事宜,當然也包括MySQL的管理及優化。隨著規模的擴大,可能改由運維工程師來負責這些事了。更進一步的話,就開始需要專職的MySQL DBA了,隨著業務發展,形成DBA team,同時負責和數據及存儲相關的事務,比如存儲設備、NOSQL、日誌存儲分析,甚至大數據平台。

在一線的大型互聯網公司里,甚至還區分運維DBA開發DBADB架構師等不同崗位,為的就是能做到術業有專攻,讓專業的人專註做專業的事

比較理想的MySQL DBA工作狀態應該是這樣的:

  • 例如MySQL實例安裝、備份恢復、SLAVE搭建、許可權管理、DDLDML變更上線等基礎的工作,通過DB平台滑鼠點點點即可完成,大概佔用10%的時間;

  • 關鍵業務的SQL審核也可採用DB平台來完成,尤其是一些常規的SQL規範規則,DDL相對好辦,DML可能需要進一步完善的評估,個別SQL再採用人工審核,平時經常和業務部門進行溝通,了解下階段的業務目標,預估DB端可能需要承載的壓力,大概佔用20-30%的時間;

  • 通過監控系統來完成可用性及性能監控,發現異常時,再進行人工干預處理,一些容易引發性能問題的常見情景,也可以固化到自動化處理機制中,比如自動探測超過N秒的純SELECT查詢,避免這種慢SQL產生連鎖反應,或者自動殺掉一些有SQL注入風險的請求,大概佔用10%的時間;

  • 資料庫主動優化,一個有豐富經驗的DBA,看到資料庫的一些現場情況時,一般即可預感到是否需要進一步深入優化工作。而SQL開發規範推送也很重要,可以在開發階段讓程序猿做好基本的SQL優化,這樣上線後不會手忙腳亂,反覆的出現一些低級SQL性能問題,大概佔用20-30%的時間;

  • 其餘的時間可以用來充電學習,以及圈內的交流扯淡了,擴展知識面。

3、如何成為MySQL DBA

事實上,MySQL DBA的入門並不難,但若想要成為高級、資深的DBA就有一定難度了。

如果是在校生,最起碼要先把《資料庫概論》那門課程給學一遍,其實如果是已經在職但對資料庫還沒什麼概念的人,最好也要學習下這本書,對資料庫基本概念有一定理解。

此外,最好還要對Linux有一定了解,現如今在互聯網公司中,如果想從事和技術相關的崗位,你告訴面試官不懂Linux為何物的話,估計直接就被pass了。想學習Linux,可以買本《鳥哥linux私房菜》或者參加專業培訓(花錢參加培訓並不是什麼丟人的事,關鍵是要找到一個靠譜的機構,靠譜的老師,學習效率會更高,知識也更為系統化,而自學畢竟要消耗更多時間,也可能比較零散,花錢買時間學會後,可以更快獲得回報)。

有了基礎概念後,可以再買一本MySQL相關的基礎入門書籍,比如《MySQL必知必會》、《深入淺出MySQL》等,其實我更建議把MySQL官方手冊中的關鍵章節完整看一遍(關注公眾號imysql_wx,發送「章節」獲得推薦),並結合裡面的案例進行測試,或者自己用wordpress搭一個博客站,平時可以自己做些實踐演練。

如果能專註把上面的內容學習完畢,我相信你已經可以成為一個合格的初級MySQL DBA了。接下來就是找到一個合適的工作機會(可以把簡歷給我,我根據情況可幫忙進行推薦),進行真正的實操,獲得正式從業經驗。

4、MySQL DBA如何提升

事實上,如果你已經獲得了MySQL DBA工作機會之後,如何進行自我提升通常來說已經不需要我來說了,可以參考公司里的同事以及其他同行的提升發展道路模式。

通常來說,在這個階段需要深入學習的是某些關鍵知識點,比如資料庫原理、並發事務、鎖控制、存儲引擎、主機硬體優化等知識。有些不錯的書可以推薦,比如:《高性能MySQL》、《資料庫系統實現/概念》、《資料庫與事務處理》、《資料庫索引設計與優化》等等。

5、後記後記一

從目前的行業情況來看,MySQL DBA還是個很熱門的職位,現在加入還不算晚。除了自學成才外,還可以考慮參加我和吳炳錫合作的「知數堂MySQL DBA實戰優化」培訓課程,截止目前已經舉辦了六期兩百多名同學,個別優秀學員成功加入支付寶、京東、去哪兒、暢遊、美菜網、37遊戲等各大互聯網公司。

後記二

關於MySQL DBA求職面試的一些關鍵知識點,可以查看我的這篇歷史分享:MySQL DBA面試全揭秘。掃描二維碼直達(若無「MySQL中文網水印」的二維碼請勿打開):

此外,也可以關注公眾號imysql_wx,發送「新手」獲得學習資料推薦。

後記三

此前有朋友讓我推薦一些MySQL相關的技術資源,自己收藏吧:

  • 官方MySQL手冊http://t.cn/zR9VXxB ,一有不清楚問題我都會嘗試先從手冊里找到答案。

  • MySQL Planet聚合 http://t.cn/zWOqujX ,集合了幾乎所有MySQL相關的技術站點

  • ORACLE MySQL官方 http://t.cn/Ry6IUzQ ,官方團隊的blog,

  • MySQL Server團隊 http://t.cn/R7vvhpw ,官方Server團隊blog,比上面那個blog更實用,細節、技術型文章更多

  • Percona團隊官方 http://t.cn/aWUo1W ,無需多說

  • MySQL Planet中文聚合 http://t.cn/Ry6IUz8 ,集合了不錯的中文MySQL技術站點

  • 最後就是我自己的網站:http://imysql.com 哈哈哈


幾個建議,望參考。這裡講到了系統學習,那不能僅僅只關注資料庫本身了,還應該關注mysql的運行環境和應用環境。


1:如何對mysql資料庫本身有個清晰的認識和學習,mysqlops已經回答過了,很精闢。

2:現在的DBA不能只關注資料庫本身,對操作系統、存儲、網路知識也有個系統的學習,資料庫是運行在他們之上的。比如:mysql大多都運行於Linux操作系統,那麼問題來了,如何配置Linux能讓mysql獲得更大的性能優勢和持續的穩定性,Linux本身也有很多的系統參數需要學習。最好多學習幾個Linux發行版本。單獨學習操作系統很枯燥,建議放到相應的環境當中去。


對存儲知識的了解對於DBA來講是如虎添翼的,針對我們的應用環境,選擇什麼樣的存儲 ,如何劃分存儲也都是需要持續學習的。

3:對應用需要深入了解,資料庫是為應用需求服務的。只有了解清楚了應用的特徵才能更好的配置和優化資料庫。

4:結合以上幾個方面,那就是一個整體的系統架構了,綜合考慮,這樣可以提高自己的大局觀。


最後,多參加mysql的社區討論組和線下活動。多溝通多交流。


感覺題主已經對mysql有比較好的理解了。但是我認為多看書還是有好處的。有些書值得反覆看許多遍,有時候只看一遍無法深刻理解吸收,思考也不夠充分。

無論英文好不好,看英文手冊的能力是一定要有,也一定要培養的。

mysql官方手冊:14 The InnoDB Storage Engine

推薦看幾本書:電子書下載傳送門

《高性能mysql第三版》

《資料庫系統概念》

《深入理解MySQL》

《MySQL性能調優與架構設計--全冊》

《SQL Antipatterns》

《MySQL技術內幕 InnoDB存儲引擎》


看幾遍中文官方文檔,再看幾遍英文官方文檔,再看高性能mysql,多了解下業務


心中的方式就是最適合自己的


推薦閱讀:

個人網站,資料庫如何設計存儲富文本文章比較好?
想真正從基礎到深入地學習資料庫,但是市面上的數據過多,有什麼好的書籍,網站嗎?
Android 開發中為什麼很少使用 JSON 存儲數據?
如何從零寫一個kv資料庫?
區塊鏈和分散式資料庫有什麼本質不同?

TAG:資料庫 |