轉自:https://blog.csdn.net/xielingshao/article/details/77840101mysql
隨着MySQL地位爆炸式的提高, MySQL DBA的市場缺口日益劇增,優秀的MySQL DBA正在成爲各個互聯網公司搶手的人才。然而,需求來了,問題也來了,如何快人一步提升自身技能,讓本身在日益激烈的技術挑戰中不斷增值、脫穎而出?算法
今天,咱們將鎖定MySQL數據庫,經過韓鋒、虢國飛、楊奇龍、楊建榮、張青林、李輝、賀春暘、李季鵬等8位MySQL專家的經驗之談,爲想從事MySQL DBA的同窗們答疑解惑,指明一條修煉的路子。sql
相關參考修煉書目:數據庫
《高性能MySQL(第3版)》
《MySQLDBA修煉之道》
《MySQL王者晉級之路》
《MySQL運維內參:MySQL、Galera、Inception核心原理與最佳實踐》
《MySQL技術內幕++InnoDB存儲引擎(第二版)》
《MySQL5.7-官方文檔》編程
認真讀完本文,你能夠了解到:緩存
1、選擇篇安全
一、MySQL的流行緣由及從業前景性能優化
二、MySQL DBA的薪資緣何廣泛高於Oracle DBA架構
三、我的如何完成Oracle向MySQL的轉型?併發
2、學習篇
一、從初級到高級的MySQL DBA學習路線及學習資料推薦
二、源碼是否爲高級MySQL DBA的必備技能?
三、MySQL不一樣分支的選擇討論
四、MySQL認證考試的含金量
3、趨勢篇
一、隨着功能的不斷完善,MySQL還會是「小而美」的表明嗎?
二、MySQL目前還缺少哪方面的能力,是否足夠成熟?
三、如何看待數據庫中間層與數據庫的關係?
四、傳統運維逐步萎縮下,DBA應選擇什麼方向發展?
4、將來篇
一、數據庫雲化會對傳統DBA帶來什麼樣的衝擊?
二、如何看待分佈式數據庫的將來前景?
三、愈來愈多的DBA正在或將從事DevOps類工做,你的見解是?
Q1:你認爲MySQL流行的主要緣由是什麼?從長遠角度來看,從業前景如何?
一、流行緣由
虢國飛:綜合來看,MySQL的流行是偶然中的必然。緣由主要有如下三點:
二、就業前景
李輝:目前來看,MySQL DBA的日子仍是很滋潤的,在可預見的3-5年內,MySQL在互聯網行業的地位仍沒法取代,對DBA的需求量仍然很大,特別是中高級DBA。但從長遠角度來看,從業人員也要多涉獵其它關係型數據庫以及NoSQL、Devops、雲計算等技術,現代社會惟一不變的就是變化,不斷學習、擁抱變化才能保證本身不被將來社會淘汰。
Q2:如何看待當前MySQL DBA的薪資廣泛高於Oracle DBA的現象?若是想從事DBA,選哪一個數據庫更好?
一、MySQL DBA高工資的緣由
楊建榮:由於是和Oracle來對比,能夠分爲幾個方面來看:
楊奇龍:對於薪資高這點,我以爲要從兩方面看:
二、從事DBA崗位,選MySQL仍是Oracle?
楊建榮:有句話說,選擇的利劍屬於在於可以揮舞它的人,根據工做須要,本身的喜愛去選擇就能夠,若是隻是本着錢途是不推薦的。若是非要糾結究竟是哪個,其實也能夠換個角度,若是兩個都學,是否是這個問題就不是問題了。
楊奇龍:個人想法比較實際。行行出狀元,無論是MySQL DBA 仍是Oracle DBA都有比較成功的人士,建議是看各自的興趣和愛好,以及本身想進的公司的招聘需求。MySQL 和Oracle 並不矛盾,我認識的至關多的人,兩種數據庫都能維護得很是好,好比大牛樓方鑫,Oracle 工具開發以及MySQL 內核開發都有很是出色的成果。
Q3:我的職業發展如何完成Oracle向MySQL的轉型?
楊建榮:從自身目前從事的工做,分三種狀況來看:
(1)目前從事的工做以商業數據庫Oracle爲主,又想轉型爲MySQL DBA的:
自搭環境學習實踐是一個起步,若是以爲沒有明確的學習目標,考個MySQL OCP也是一種階段性的學習成果驗收,總比漫無目的的學習收穫要大。已經有了Oracle基礎,能夠經過對比的方式來引入到MySQL的學習中。公司若是後期引入MySQL方案,你就是最佳人選了。
(2)目前工做中有MySQL環境的:
在作好本職工做的前提下,能夠自薦,讓別人推薦來作MySQL DBA的工做。對企業和你我的都是共贏,因此開發測試運維同窗相作MySQL DBA也是能夠的。
(3)現有的MySQL工做和自身指望相比差距較大的:
一種方式是自查,咱們在當前的環境還可以作出些什麼,若是可以把當前的環境作到精細化的管理,總會有很是多的事情和收穫,還有一種方式就是跳槽,這個的前提也是你在儲備了不少的技能以後,由於機會是留給有準備的人。
虢國飛:我是從SQLServer轉型到MySQL的,感受這個轉型應該比Oracle轉MySQL更大,由於自己還要克服操做系統的區別(Windows轉型Linux),不過若是你已經有一個數據庫產品的經驗,再來學習其它數據庫產品,難度應該不是很大,由於不少底層的原理是相通的,概念也差很少,無非是各類產品在設計上側重點有不一樣、使用方式上有差別。
因此我以爲要完成這個學習轉型,首先心態上面應該放開(千萬不要帶偏見,認定哪一種好哪一種很差),經過對比的方式來學習和實踐,善於總結差別分析優劣,多和同行溝通交流,相信轉型過程不會太長。
李季鵬:從Oracle到MySQL轉型,不僅僅是一我的的學習過程,也是一個從開發到運維的磨合過程。
Q1:從初級成長到高級,有推薦的MySQL學習路線嗎?
楊奇龍:DBA 是一個「複雜」的工種,要成爲高級/資深MySQL DBA,我總結了如下五點:
參考DBA技能樹
http://blog.itpub.net/22664653/viewspace-2097142/
楊建榮:DBA乾的是一個手藝活(鷹眼,獅心,女人手),裏面有不少技巧,可是一個崗位從初級走向高級始終是經驗和實踐的積累,沒有其它捷徑。這裏給你們提供一個自查級別的方法:
Q2:關於MySQL學習資料、書籍或網站,你的推薦是?
楊建榮:簡單來講,官方文檔是最好的學習資料,在這個基礎上去閱讀更多的書籍會起到融會貫通的做用。若是推薦書籍,我有下面的一個讀書清單可供參考。
入門:
《塗抹MySQL:跟着三思一步一步學MySQL》
《MySQL數據庫應用從入門到精通(第2版)》
《MySQL核心技術手冊》
《MySQL技術內幕(第5版)》
運維實踐:
《高性能MySQL》 經典必讀
《MySQL管理之道:性能調優、高可用與監控(第2版) 》賀春暘
《深刻理解MySQL核心技術》帕奇維
《MySQL運維內參》 周彥偉、王竹峯、強昌金
《高可用MySQL》
內核:
《MySQL技術內幕:InnoDB存儲引擎(第2版)》姜承堯
《InnoDB – A journey to the core》Jeremy Cole
楊奇龍:在建榮老師的基礎,我再推薦:系統優化-《性能之巔》、開發-《Python 編程:從入門到實踐》
張青林:《數據庫系統原理》、《InnoDB存儲引擎》。
李季鵬:最爲建議的仍是官方文檔,若是嫌官方文檔英文看着麻煩,能夠關注Github上的MySQL 5.6 手冊翻譯項目(mysql2cn/manual56)。
Q3:你認爲研讀源碼是通向高級MySQL DBA的必備技能嗎?
楊奇龍:從個人理解來看 DBA 能夠分爲產品DBA、運維DBA、內核研發DBA。具備內核研發能力或者閱讀內核源碼的人,在瞭解具體技術原理時具備必定的優點。可是成爲高級DBA和是否研讀源碼不衝突。
須要注意的是,咱們要有打破砂鍋問到底的「要性」。其實大牛和咱們的差距就是對於一個個技術問題刨根問底的及時鑽研。好比你遇到thread running飆高的問題時,是把慢查詢優化了就行了嗎?仍是觸類旁通,反思什麼緣由會致使thread running飆高?要懂得去思考下面四個問題:
可否成爲高級DBA,在於咱們是否解決了通常人解決不了的問題的能力。
張青林:首先,我不認爲讀源碼是通向高級MySQL DBA的必備技能,即便不讀源碼,也是能夠成爲高級MySQL DBA的。讀源碼是爲了瞭解其工做原理,分析其瓶頸,而後從內核上作優化,這是內核研發的必備技能;作爲運維人員,只要懂其原理、使用方法,處理線上問題,並配合研發人員對線上進行維護,同樣是很高質量的工做,也是「源碼」落地的最重要的一部分,因此不可厚此薄彼。 固然,讀源碼能夠更深層次的理解內核的工做機制,有利於學習。
Q4:針對MySQL的不一樣分支(Oracle官版、Percona、MariaDB),你更看好誰?
韓鋒:我仍是看好Oracle官版。過去幾年,官版MySQL的發展有些滯後,致使不少人選擇了其它版本,Oracle也看到了這一點。最近一兩年,隨着MySQL5.六、5.7乃至8.0的推出,官版已經逐漸追上了其它分支版本。依託於Oracle在數據庫領域的深厚底蘊,將來官版MySQL的發展更加看好。
若是選擇的話,我推薦的順序是:MySQL社區版->Percona->MariaDB->MySQL企業版。
張青林:我更看好 Oracle 官方版本,MySQL 被收構以後,Oracle 在MySQL上的投入不斷的增強,優化器、InnoDB、複製都推出了不少功能,如GR、多源複製、並行複製、優化器的重構、Undo空間的在線縮小、InnoDB的性能優化、加密表空間等,這些都是解決用戶問題的實際行動,Percona的開發也有很大一部分是基於 Oracle MySQL 來作的。
賀春暘:若是你想與官方MySQL版本儘可能保持緊密,而且想得到更好的性能、運維工具和有用的特性,那就選擇Percona。若是你以爲MariaDB對服務層的大量修改更快、更優,或者想要更普遍的存儲引擎,好比Spider分庫分表引擎,那就選擇MariaDB。
Q5:MySQL 的認證考試值得考嗎?含金量有多大?
楊建榮:MySQL的認證目前只有MySQL OCP,目前和Oracle OCP相比,資料和套路都會少一些。考這個認證,你得明白幾件事情:
賀春暘:MySQL DBA職位門檻較高,一般須要工做經驗爲3年以上的,考取認證並非必須的,其含金量不大。
李季鵬:認證只是一個門檻,一個介紹本身時精煉的關鍵詞,實際上並不能等同於技術水平的真正高低。MySQL認證分爲開發與管理,我的建議能夠分別視爲本身在這兩條線路上學習掌握程度的一個檢驗手段,無需過度看重,也沒有必要徹底看輕。
Q1:隨着MySQL功能的不斷完善,其體積也愈發龐大,你是否擔憂其將來會相似大型商業數據庫,再也不是「小而美」的表明?
張青林:沒有這方面的擔憂呢,無能否認,編譯後的 mysqld 文件愈來愈大,但並不影響 MySQL 的發展, 主要表如今如下幾個方面:
因此,我以爲沒有用戶會由於多了幾十M的空間而嫌棄更好用的版本吧,我以爲關注的重點不該該是小而美,而是軟件質量和易用性。
虢國飛:主要仍是看場景需求,對於互聯網公司來講,強調的是高可用性,出問題能儘快恢復,不大可能把大把的應用或者數據放到一個籃子裏面,不然出問題影響比較大,恢復起來也會比較複雜緩慢;但由於如今不少分佈式部署的DB比較零散,量大了以後維護起來比較麻煩,也可能有部分需求是須要作一些遷移整合的,不過這些只是局部不是總體。
我以爲如今你們更關注的是如何實現自動化運維、集羣自動化和動態的擴縮容等方面,若是能經過技術把運維複雜度下降,管理再大的量其實都不是問題,如今不少開源產品也在往自動維護和動態擴縮容這方面攻關了。
賀春暘:不用擔憂,您能夠切爲MariaDB。只要移除MySQL,而後安裝MariaDB。你的全部工具,鏈接程序均可以正常運行。升級到MariaDB,你也不須要進行一次導出和導入,數據格式MariaDB是兼容的。
Q2:你認爲MySQL是否足以擔負起企業級應用的數據載體?若是不是,還缺少哪方面的能力?楊建榮:我認爲MySQL技術正在走向成熟,可是MySQL的生態已經成熟。MySQL從早期的發展至今,推出的解決方案很是多,從MySQL 5.7,8.0裏面仍是能夠看到不少它在功能性、高可用、性能等方面都在發力,不少功能和Oracle很類似,都是一個逐步完善的過程,MySQL的使用羣體和社區決定了它如今的高度,並且絕大多數的互聯網公司都在使用MySQL技術,因此做爲企業級應用是徹底能夠的。可是如今的互聯網行業對於MySQL的青睞,不少不在於MySQL單機可以支撐的性能,而是在於靈活擴展的架構,對於MySQL的使用,再也不是集中式、共享式的方式,會作拆分、分佈式等。值得一提的是,不少大廠對於MySQL的技術把控力已經走在了世界前沿,而從技術架構的角度來看,如今是更傾向於把MySQL用得更純粹,更簡單,而不是大量的運算和壓力都放在數據庫側,這是MySQL生態帶來的一大優點,也讓更多企業級應用能夠落地。楊奇龍:顯然MySQL已經足夠成熟來承擔企業級應用的數據載體,這點最近幾年各個電商的購物節,每秒處理的交易筆數和數據量足以回答這個問題。固然咱們的業務需求是多種多樣的,除了常見的OLTP業務,還有其餘OLAP 業務,海量日誌類型的需求。在這方面MySQL 多少顯得不足以適應業務需求。
另外就是由於MySQL不能支持在線的擴容、HA,必須藉助第三方工具來作,不過好在5.7版本推出MGR ,Percona推出的PXC在很大程度上緩解了HA 方面問題。
賀春暘:主要是官方缺乏分庫分表的解決方案。MariaDB官方提供了Spider引擎做爲解決方案,但目前尚未正式GA。因此涉及非事務強一制的業務,如LOG信息等,一般是放入MongoDB裏,經過其自身的自動分片功能實現對數據的擴容。
Q3:你是如何看待數據庫中間層(例如Cobar、Atlas等)與數據庫的關係?
楊奇龍:準確一點的說是數據庫中間件,它們是數據庫服務的一種輔助,藉助數據庫中間件,數據庫能夠具備分佈式、讀寫分離、負載均衡、鏈接池、訪問控制等等功能,數據庫業務系統上具有更強大的功能和支撐能力。
中間件在必定程度上解決了單機數據庫系統容量方面的限制,能夠經過讀寫分離方式或者水平拆分的方式總體提高數據庫的吞吐量。
另外一方面中間件在數據分佈上利用shardingkey將數據獨立開,對於聚合類的需求是一種障礙。還有當前的數據庫中間件對於跨庫分佈式事務很難保證不一樣數據庫分片的數據一致性問題。這些都須要開發在使用中間件的時候注意下規避。
虢國飛:中間件目前在MySQL數據庫橫向擴容方面做用很明顯,固然不止侷限於此,咱們公司的DAL中間件就作了不少的功能,比方鏈接池、分片路由、限流、熔斷、加密保護等,這些功能不只能支持數據庫的橫向擴容,還有效保障了數據庫的安全,因此說中間件和數據庫目前是不少公司的黃金搭檔。
韓鋒:這些中間層產品,是爲了彌補數據庫的功能缺陷或性能、容量不足纔出現的。在必定階段,確實解決了企業的實際需求。當咱們也看到,其對應用開發還沒法作到徹底透明,總體架構的複雜度是提升了。從長期來看,分佈式數據庫勢必會從根本解決上述問題,到時這些中間層產品也就沒有使用意義了。
Q4:你所在的公司是否有成熟的MySQL運維平臺?若是是,DBA在傳統運維類工做逐步萎縮的狀況下,選擇什麼方向來發展?
虢國飛:我以爲一個公司的運維平臺發展基本有幾個階段:
另外,其實不止是DBA,整個運維體系都在作轉變,傳統的玩法效率低、重複工做多,已經不適用互聯網公司高速度、快節奏的發展了,因此說DBA工做內容須要轉變,思想也須要轉變,應該向着如何快速交付、提升數據庫總體穩定性、高效率運維、打造適合更多適合業務須要的數據庫產品方案,甚至給研發輸出數據架構方案等這些方面發展,開始往前走,這樣價值能更大(傳統DBA每每是沉在最後面,領業績的時候沒有人影,只有出問題的時候纔出來背鍋)。
韓鋒:公司目前有數據庫運維平臺,固然尚未覆蓋全部運維需求,但也大幅度減輕了DBA的工做負擔。傳統運維類的工做,確實在不斷萎縮之中。在這種狀況下,DBA的發展可朝如下方向努力:
張青林:騰訊有很成熟的MySQL運維平臺,這簡化了DBA 的運維服務,提升了DBA的幸福生活指數。DBA 的運維工做較以前會少一些,可將多餘的時間投入到MySQL其它的相關工做當中,轉向研發型運維,如:
只要是和數據庫相關的,本身又有想法的,均可以和研發一塊兒討論並嘗試。
Q1:你認爲將來雲會成爲數據庫的主要載體嗎?若是是,它會對傳統DBA帶來什麼樣的衝擊?
虢國飛:我的認爲使用雲是一種趨勢,它能在資源交付、穩定性和成本方面爲企業提供很好的支撐,隨着雲產品的不斷完善,目前已經能夠知足大部分中小企業的需求,中小企業徹底能夠省心省力地使用雲(不用關心資源和維護,而專心作業務)。
不過如今公有云產品對一些要求比較高、量大的企業還不是特別合適(將來也許也不是問題);所以DBA也不要再固守傳統的城池,應該放開心態來面對這種變化,更多的把重心往上面所說的方向上轉,作數據架構、存儲方案,這樣價值更大。
韓鋒:將來雲必定會成爲數據庫的主要載體。人們能夠像使用水、電同樣,使用數據庫服務。傳統DBA,從事的基礎運維類工做基本不復存在。DBA,要麼繼續深研數據庫技術,在雲服務商或乙方服務類公司發展;要麼傾向於架構、開發、優化方向發展。
李季鵬:我的理解,公有云爲成爲初創企業和互聯網企業的主要使用者;傳統企業從各個角度考慮只會考慮私有云或者混合雲方案。這樣的場景,與之前小企業不須要DBA,大企業DBA忙不過來的基本狀況其實沒有本質區別。引入雲,DBA須要及時更新知識儲備,以應對各類新技術引入的挑戰。
Q2:你是如何看待分佈式數據庫的將來前景?將來哪些場景會優先考慮此類方案?
虢國飛:自從Google Spanner F1 發佈後,分佈式數據發展很快,跟隨者國外有CockroachDB,國內有TiDB,二者都發展比較火,從原理上來說也確實能解決很多業務場景的痛點,如數據一致性要求高(多副本分佈式協議保障一致)、數據容量很大、動態擴縮容、容災要求高、跨機房、跨地域的部署需求等,這類需求通常是對一些大公司、大數量和數據質量要求很高的公司纔會有,通常中小公司也玩不起來,由於分佈式數據庫部署的成本仍是比較高的(通常最小配置就是好幾臺機器),並且運維難度也比較大(沒懂行的人出問題基本搞不定),目前不少分佈式數據庫產品在性能和穩定性方面還須要進一步通過驗證,一旦技術穩定後,應該仍是比較有市場的。
韓鋒:很是看好其發展前景,特別近兩年來,已經有不少公司作了這方面的嘗試。隨着分佈式思想、算法的成熟及硬件技術的發展,將來分佈式數據庫將逐步成熟、完善,成爲主流的方案。做爲早期嘗試,可在數據安全要求相對較低的OLAP領域嘗試使用。
Q3:在不少公司,DBA正在愈來愈多地從事DevOps類工做,你的見解是?
楊奇龍: