1. 程式人生 > >一位初級MYSQL DBA的入門經過

一位初級MYSQL DBA的入門經過

先介紹一下我自己,MariaDB(mysql)/Monogo的初級DBA,從業一年多,目前在職。2017年在一所哈爾濱的211學校畢業,接觸資料庫是在大三上期,那時我們專業安排了資料庫這門課,老師教的是SQL Server,這是我大學唯一全程用功的一門課,雖然還學了一些程式設計的(C/JAVA/C++等),但是都是打小抄才考過的。

大學的瑣事一開啟就說不完,還是說正事吧。大四上期開始人生的第一次求職,秋季招聘末期,哈爾濱早已到了零度以下,小夥伴們都披上了大棉襖,走起路來小心翼翼的,積雪導致路面非常的滑。之前犯懶再加上沒啥信心,一直沒參加招聘會,後面我開始為自己的前途擔憂,於是隨便寫了寫簡歷,選了一個本校的宣講會,火急火燎的就去了。我還記得面試時我寫的題目是資料庫開發相關,考你SQL、過程、函式等,由於我們資料庫老師只教了我們最最基本的DML/DDL/DCL語句,於是那些題目我只能邊百度邊瞎寫,但還是有很多寫不出來,厚著臉皮的交給了工作人員,記得也是個女的,妹子看後笑了笑,說問我幾個簡單的問題,我大致記得問到了聚合函式有哪些,緊張的我居然只答出了四個(其實五個啦)。然後她問我考不考慮北京工作(因為我的意願寫的是深圳),我說不考慮,她就叫我回去等通知咯。我感覺自己應該沒戲,看著身邊那些拿到TX/JD/BD offer的同學,我居然很淡定……主要是想著還有春招呢!!!後來才知道,你不努力去做,一定會後悔,很多事情只有回過頭來,才看的清楚與明白。

2017年春天,大四下期開學,我留在了深圳,沒有回學校參加春季招聘,想著都快畢業了,回學校不一定找得到工作,乾脆就直接在外面找算了,找個公司實習一下,能賺點錢花,還能積累點經驗,挺好的,那會兒想著只要是資料庫相關的工作,給錢我就去幹(真是傻)。。。這裡我提一個有趣的事,我給老爸說我要找工作,他居然帶著我去了鼎鼎大名的三和人才市場…,而我那時居然也就開心的帶著簡歷去了,去了之後發現確實也有招聘IT的,但也就那麼幾家,大部分是工廠車間的招聘職位。轉了一圈就溜回家了。

最後,上了智聯,那會兒傻乎乎的以為只有智聯!第三次面試終於定下來了,前兩次面試的應該都是培訓機構,不得不說,那些培訓機構真是喜歡找我們這種小白下手啊,各位剛畢業或者轉型過來沒經驗的同志應該深有體會。還是說我第一份工作吧,一個小的外包公司,為期3個月的資料庫開發,用的ORACLE以及某個ETL工具,實習工資1.5K!其實只是補貼並不是工資。我也真是能自我滿足,這點錢也去幹了,其實我相信有很多同志跟我一樣,擔心找不著工作,抱著學習積累經驗的態度,任人宰割。

於是乎,我在畢業回深圳的火車上,就跟領導說了我要辭職,能感覺出領導對我不捨,但是我坦白了自己的期望工資,對方表示不能立馬滿足,到家的第二天就去公司辦離職手續了。後面在家休息了一個月,重新回到了智聯開始投簡歷,目標是DBA或者資料庫開發,具體什麼資料庫我給自己限制,很快就收到了面試通知,是一家大公司,世界五百強,資料管理的職位,也許是他們看中了我的文憑,再加上感覺我的資料庫基礎還不錯,最後面試通過了,待遇給的6K,15-18薪。我那時對這個待遇已經很滿足了。在等offer的期間我還陸續面試了兩家,不過好像都沒面上。

終於談到了現在這家公司,我所在的專案組剛轉型過來做大資料,幾個老員工對程式設計基本是一竅不通,我清晰的記得那時坐我旁邊的那我老哥整天抱著一本厚厚的《鳥哥的私房菜》在仔細的品味,我以為他是Linux大神,後面才發現我想多了。招我進來就是負責給他們管理資料,資料庫用的MariaDB、MongoDB。我們不屬於那種開發部門,沒有實際的專案,沒有直接為公司盈利。七八個人負責資料分析,一個人負責資料視覺化,再加上兩個領導,就是我所有的資料庫使用者了,資料來源於其他部門,我每天定時遷移到我這裡,讓同事去分析展示。就是這樣一個環境,我開始了的我DBA的入門之路,沒人指路,完全自學,主要學習MariaDB,Mongo學了一點點,它別crash我就不管他。

我記得剛開始那會,我不知道自己該幹啥,就給我的頂級領導發微信,問她我該做什麼工作,結果沒一會我的上級領導就跑過來跟我說,以後有啥事先給她說,哈哈哈哈,估計她被老闆訓了一頓,抱歉了。後面她給我列了一下我要思考並從事的工作內容(我估計她也是百度搜的),包括資料安全、遷移、備份,使用者管理等,由於我之前用過mysql,所以上手也比較快,自己通過百度學習了shell指令碼,後面自己也寫過幾千行的指令碼,幾十個函式….。

前幾個月真的很忙,特別充實,擼shell能擼的我一上午不去廁所。由於開始資料遷移與備份的任務比較重,所以重點在寫指令碼上面,沒過多的去研究mysql的知識,優化監控啥的基本是空白,但是讓我很自豪的是,自己成功的遷移了一億多條資料,當然中間有很多的轉換規則,這裡我告誡大家不可沉迷於shell,畢竟它這是一個輔助DBA的工具,有些也許可能需要它去實現而已,你不用買視訊買書的去全方面的去學習shell程式設計,做到會用就行,要是你會其他指令碼語言當然也行,條條大路通羅馬,我曾經還計劃學習python或者perl,但後面選擇了放棄,畢竟該瞭解的資料庫知識還遠遠不夠。

後面指令碼弄好,每天正常執行,就開始閒的慌,墮落了幾天又開始著手MYSQL的研究。於是乎,就從今年年初學到了現在,從資料型別到儲存引擎,從SQL優化到引數調優,從單機到幾種複製等等,我能想到的知識我都去了解了一遍,學完之後就開始膨脹,看了看招聘資訊與面試題,又灰溜溜的滾去學習了。

一個合格的DBA應該是對自己的從事的工作充滿著自信,而我,還在繼續努力提升著技能,來增加我自信心,只是學到現在,感覺自己遇到了瓶頸,自己想研究高併發,可實在找不到合適的環境,不知道如何去模擬去實驗,一些必備的知識學了又不去運用,感覺一點點在遺忘,會有一種危機感,會讓我喪失一點信心,現在讓我準確說出所有explain中欄位值的含義,我表示我做不到,感覺記憶力嚴重的不夠用啊。不能應對高併發的DBA不是好的DBA,但我對它是可望而不可即。想學習一下redis、mencache,覺得它們比較熱門。但又擔心陷進去導致mysql又不行了。嗯,又墮落了一陣子,到了現在我才逐漸想通, 只要及時複習,不僅不會忘掉之前學習的知識,還可能有更深的理解,不能因為顧慮而阻止前進的步伐。

我沒談現在這份工作的具體細節經過,因為本身就沒啥亮點,每天除了學習就開會或聽課。我根據有限的經驗,談一談MYSQL DBA必掌握的知識,當然這是初級的看法,無論誰有啥建議都可提出來,讓我學習思考。

  1. 資料型別
  2. 複雜的SQL
  3. SQL優化
  4. 索引、事務、鎖
  5. 儲存引擎
  6. 引數調優
  7. 狀態監控
  8. 基準測試
  9. 資料備份、遷移、複製
  10. 高可用