MySQL是一個跨平臺的開源關係型資料庫管理系統,目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。隨著MySQL在網際網路上被廣泛使用,在資料庫領域的地位爆炸式的提升,BAT等各網際網路的去IOE,大量的使用MySQL作為核心資料庫,MySQL DBA的市場需求量日益劇增,好的MySQL DBA更是各個網際網路公司搶手的人才。越來越多的IT人才開始轉型做DBA,那麼作為一個DBA,首先要明白作為一個DBA的核心目標也是終極目標:保證資料庫管理系統的穩定性、安全性、完整性和高效能。
MySQL DBA大概可以分為兩種:一種是開發DBA,一種是運維DBA,這裡說的MySQL DBA是指運維DBA。一般意義上的DBA指的是運維DBA,只是負責資料庫的運營和維護,包括資料庫的安裝、監控、備份、恢復等基本工作,而高階或資深 DBA職責比這個大得多,需要覆蓋產品從需求設計、測試到交付上線的整個生命週期,在此過程中不僅要負責資料庫管理系統的搭建和運維,更要參與到前期的資料庫設計,中期的資料庫測試和後期的資料庫容量管理和效能優化。
對於運維DBA來說,主要的職責為以下幾點:
-
監控:對資料庫服務執行的狀態進行實時的監控,包括資料庫會話、資料庫日誌、資料檔案碎片、表空間監控、使用者訪問監控等,隨時發現資料庫服務的執行異常和資源消耗情況;輸出重要的日常資料庫服務執行報表以評估資料庫服務整體執行狀況,發現資料庫隱患;監控對於DBA來說是至關重要的,是DBA的第三隻眼 睛,利於監控可以自動處理一些常規的故障,提前發現並解決潛在隱患,監控對於運維是必備的技能,如果你不懂監控,那麼你就不是一個稱職的運維人員;
-
備份:制定和實施資料庫備份計劃,災難出現時對資料庫資訊進行恢復,維護適當介質上的存檔或者備份資料。對資料庫的備份策略要根據實際要求進行更改,資料的日常備份情況進行監控。備份大概分為兩種:一種是定時、計劃性的備份,包含全備和增量備份,常用的工具一般為mysqldump以及xtrabackup為代表的第三方備份工具;一種是執行DML時更新和刪除的備份,這種備份一般有以下幾種備份方式:一種為create tablexxx_mmddhhmm select的方式備份到表中,一種是mysqldump加上條件做備份,還有一種是select into oufile等幾種方式,防止執行錯誤時可以快速的恢復。在日常對資料庫的操作中,特別作為一個DBA,永遠要給自己留一個後手,保證在需要進行資料恢復的時候可以隨手拈來。
-
安全審計:為不同的資料庫管理系統使用者規定不同的訪問許可權,以保護資料庫不被未經授權的訪問和破壞。例如,允許一類使用者只能檢索資料,而另一類使用者可能擁有更新資料和刪除記錄的許可權。
-
故障處理:對資料庫服務出現的任何異常進行及時處理,儘可能避免問題的擴大化甚至中止服務。這之前DBA需要針對各類服務異常,如機房/網路故障、程式bug等問題制定處理的預案,問題出現時可以自動或手動執行預案達到止損的目的。在故障處理中,DBA的反應至關重要,可能在分分鐘鐘的時間內,小的故障引發大的故障,對業務的影響更大,這個非常考驗DBA的應急能力和應變能力。對於常見的故障,比如連線數突然增多、資料庫伺服器空間的清理、主從同步延遲、CPU使用過高等,可以和研發一起制定相應的預案,並且和監控結合,當達到一定的閥值,使用相應的指令碼自動處理,這樣在一定程度上減少DBA的工作量、提高故障處理效率,更重要的是可以為DBA爭取一定的時間,防止故障升級對業務帶來更大的影響。
-
容量管理:包括資料庫規模擴張後的資源評估、擴容、機房遷移、流量排程等規劃和具體實施。
-
資料庫效能優化:產品對外提供服務最重要的一點是使用者體驗,使用者體驗中非常重要的是產品的可用性和響應速度。而如何用最合理的資源支援產品提供高可用和高速度的使用者體驗,這也是DBA的重要職責。在多年的DBA生涯中,個人對資料庫故障的總結為:80%的甚至更高的故障來自變態的SQL語句,10%左右的來自資料庫架構方面設計的不合理,10%左右的來自硬體、OS層面。那麼基本的優化重點就就是對SQL的優化,這個需要給研發人員進行MySQL開發規範進行培訓,制定嚴格的SQL准入規則,稽核每一條上線的SQL語句,在SQL源頭上堵住大部分,然後就是對慢SQL的監控分析,定期的發給研發進行整改,並督促研發在限定的時間內整改。這部分的工作較為繁瑣平淡,但是執行好了,可以杜絕很多不必要的故障,保證業務的高效、穩定執行,這一部分工作非常考驗DBA的基礎理論知識,考驗DBA的責任性和工作的毅力。
個人認為,一個好的DBA所需要具備的基本技能包含:理解資料備份/恢復與災難恢復、DBA常用工具集的使用、知道如何快速尋找答案、知道如何監控和優化數 據庫效能、儘可能實現自動化、容量監控與規劃、索引設計、資料庫設計、資料庫安全性、持續不斷地學習和研究新版本、可以單獨的編寫獨立的或者系統的功能指令碼。這些技能基本涵蓋MySQL基礎理論知識、OS層面知識、硬體知識、網路知識、程式碼編寫能力、架構設計規劃能力、監控、運維理念、運維自動化等。因此,做一個DBA,不單純的資料庫層面的,基本知識涵蓋很多層面,因此可以說DBA綜合知識極高的複合型專業人才。
性格決定命運,態度決定一切,DBA也是這樣,性格決定高度,態度決定層次。有些DBA做了很多年,依然是邊緣人,成不了技術中堅,歸根到底可能與本身的性格有關,不思進取,工作不主動,說多少做多少,做事邋遢,不上心,能湊合就湊合,時間觀念不強等,有一部分人認為公司一個月給我1000塊的工資,我幹嘛去幹1001塊的活?只要不出人為事故就行,天災人禍自認倒黴,這樣的性格在個人職業生涯中不會有突出的成就。遇到過有些DBA都出書了,理論等技能肯定是沒問題的,但是做事毛糙,考慮問題時不全面,時不時的出點小事故,有時候做事總覺得過得去就行,面試的時候給人的印象可能是極好的,可是工作起來就能看出問題了,每在一個公司做DBA業務呆的時間都不長,畢竟群眾的眼睛是雪亮的,每個公司、每個領導都是需要能幹活、能把活幹漂亮的人。一個優秀的DBA,我心中的DBA應該是具有完美主義的人,應該具備的硬性素質包含工作認真細緻,勤于思考,良好的溝通能力、具有團隊合作精神,自我驅動能力或者說工作主動性強,堅韌的意志力和沉著的心態,好奇心和自信心強等;基本技能是基礎,DBA必備的,只是基礎而已,如果談優秀的話,那麼良好的性格和態度決定你可以在職業生涯中能走多遠。
大道理大家都懂,真正能實實在在落實到實際的不多,也正是這些為數不多的人,成為業內的中堅,所謂的大牛!最後想說的是,各個行業中沒有最牛,只有更牛,學無止境,在學習和實踐中完善、強化自己的各方面能力,不斷的提升自己。踏踏實實做事,堂堂正正做人,改變不了別人,盡最大的努力,做最好的自己!!