說說DBA職責和目標
資料庫管理員(Database Administrator,簡稱DBA),是從事管理和維護資料庫管理系統(DBMS)的相關工作人員的統稱,他屬於運維工程師的一個分支,主要負責業務資料庫從設計、測試到部署交付的全生命週期管理。
在大公司DBA通常分為高階DBA、中級DBA、初級DBA,他們的職責是不同的。
高階DBA:他們能夠熟練閱讀資料庫方面的英文資料,並且都熟悉很多種操作平臺下的幾種大型資料庫。他們知道各種不同資料庫在不同環境下的優勢和劣勢,並能在資料庫平臺和資料庫環境的選擇方面做出決策。他們一般通曉系統架構和資料庫設計,並能對資料庫進行各種級別的優化。高階DBA一般都配有助手,他們更偏向做決策和計劃。高階DBA往往在銀行業、保險業、線上交易等對穩定性、安全性、效能都要求比較高的關鍵業務處理領域大顯身手。
中級DBA:從業一年左右,熟悉某種作業系統環境下的資料庫,比如window server 2008或者目前常用的Linux(Ubuntu、Debian、CentOS)。因為對中級DBA來講,Windows NT和Unix是有很大差別的。中級DBA對SQL比較熟悉,他們自己購買了幾本資料庫方面的書籍,並深入鑽研。中級DBA往往同時兼任資料庫程式員,他們的工作對效能、穩定性、安全性的追求基本上不是很高,往往配合高階DBA做一些例行工作。
初級DBA:
初級DBA又稱為DBBS,是英文Database Baby Sitter的縮寫。初級DBA常常是兼職的,他們往往同時是程式設計師或者兼任其他的工作。初級DBA往往參與了很多和資料庫有關的專案或工作。但是,這些專案或者工作往往是:第三方軟體供應商已經安裝並配置了資料庫,他們只做一些監控的工作。他們能處理一些簡單的問題,但大多數時候他們嚮應用軟體供應商求救。初級DBA更喜歡圖形化的資料庫管理或者監控工具,他們喜歡Access這樣的桌面資料庫簡單易用,並把這些小型資料庫的經驗簡單地應用到大型資料庫相關的工作中。
初級DBA是最好區分的。而中級DBA和高階DBA就不太好區分。他們的差別在於經驗的不同和個性特點、能力方面的差異。中級DBA比較多,他們可以勝任高階DBA的大部分工作,包括:
1、資料庫安裝;
2、資料庫配置和管理;
3、許可權設定和安全管理;
4、監控和效能調節;
5、備份和恢復;
6、解決一般的問題;
今天我主要說說我公司的DBA。我所在的公司是一個初創型公司,自建立到現在已經有一年了,我並不是公司的第一批員工。初創公司的好處是最鍛鍊人,最能成長一個人。但是弊端也不少以下我從這麼幾個方面談談初創公司的弊端?
(1)升職加薪沒有一個完善的制度,完全是由所在部門的經理或者其他高層人士拍板決定,很長時間可能會停留在固定的薪資而不變;
(2)沒有公積金,初創公司一般資金有限能最大程度減少成本就減少成本(當然了,也不排除有部分公司會有,但是就我目前認識的朋友中,有好幾個在創業公司,基本上是沒有公積金的,有的是等兩年到三年相關的有穩定的收入,然後才給員工公積金;
(3)初創公司沒有固定的收入來源,除了老闆注入的資金外,基本就沒有了,除了中途來一個投資人,注入資金,不然很長一段時間是由老闆自己墊付工資及其五險等等;
(4)解僱的風險,一般情況下,初創公司很少會跟員工籤合同,籤合同是一件很麻煩的事情,不籤合同可以適當降低風險;
(5)開發流程不是非常合理和人員調配不是十分合理,往往一人兼任多個崗位,一旦溝通方面有問題,可能使專案開發進度延遲;
(6)加班是沒有工資的(不單單是初創公司,很多中小型公司都是這樣的);
不過好的方面也是十分突出的,這裡就說一點,那就是對於個人的各方面能力提升是非常有幫助的,比如就我個人,從開發到運維,再到測試,再到DBA。有的時候還得兼任下產品宣傳工作。有時還得出差調調裝置之類的。不光光鍛鍊一個人的學習能力,同時鍛鍊一個人的溝通能力及其心理素質抗壓能力等。
下面進入正題:
作為一名DBA以現在我所在的公司為例,我打算應該統一下規範,而不是各打各的想怎麼改就怎麼改。想怎麼改就怎麼改的痛苦我已經體會過一次了,不想再體會了。
以下是我的想法和將要實踐的:
作為一名DBA,他的職責應該要做到這些:
(1)安裝和升級資料庫伺服器,以及應用程式工具;
(2)資料庫設計系統儲存方案,並制定未來的儲存需求計劃;
(3)一旦開發人員設計了一個應用,就需要DBA來建立資料庫儲存結構,建立資料庫物件;
(4)根據開發人員的反饋資訊,必要的時候,修改資料庫的結構;
(5)登記資料庫的使用者,維護資料庫的安全性
(6)控制和監控使用者對資料庫的存取訪問;
(7)監控和優化資料庫的效能;
(8)保證資料庫的使用符合智慧財產權相關法規;
(9)維護適當介質上的存檔或者備份資料;
(10)制定資料庫備份計劃,災難出現時對資料庫資訊進行恢復;
針對上述說的我進行細化:
針對(1),主要考慮資料庫更新升級,效能上的提升或者是bug修補,作為dba需要關注資料庫技術前沿,目前應用比較廣的是MySQL,例如阿里的淘寶使用的就是MySQL。
關於安裝或升級可參考例子:https://www.cnblogs.com/sunofsummer/p/6381206.html。
針對(2),本著業務可擴充套件性原則,作為DBA必須要熟悉整個業務架構和業務邏輯,以CSDN為例,最初的CSDN是沒有多樣性的功能,例如學院、招聘等等。而且就是沒有廣大的使用者群體,當用戶群體增長到一定的程度時,由一百萬到一千萬時,資料庫的設計尤其重要,不僅僅需要主從複製,以保證資料的一致性,還得分庫分表。
針對(3),很多小公司是沒有DBA的,一般情況由開發組長進行表的設計,同時其組員也可以參與設計甚至自主設計。這樣存在一個重大的弊端是,當人數過多時,你改這個欄位,我改那個欄位,你新增這個表,我新增或者刪除另外一個表,當業務愈發複雜,同時表之間關係耦合性強,那麼對於整個系統而言是一次毀滅性的打擊。最理想的狀態是,開發人員與業務人員溝通好,並編寫一個業務需求設計文件和表設計文件,然後由DBA進行稽核,DBA有時需要同業務人員及開發人員溝通。
針對(4)需求變動是常有的事情,需求變動通常伴隨著程式碼的修改,程式碼的修改一般涉及實體、介面、sql(這裡以ssm框架實現的專案為例)。實體對應表結構,介面對應著業務邏輯,sql是操作資料庫的專用語言。
針對(5),資料庫的安全性尤其重要至關重要,前段時間的華住就是一個例子。一般連線資料庫有這麼幾個要素?
a.建立連線:
b.載入驅動;
c.操作資料庫的使用者和密碼;
一般情況下,檢視訪問資料庫使用者,可通過show processlist命令檢視 如果有未知的使用者和IP訪問,這時就必須引起重視了。
針對(6),最近的順豐某位程式設計師不小心刪庫,主要原因在於該程式設計師,根本原因在於制度上的不完善。作為DBA,特別是高階DBA必須要控制使用者操作許可權。
針對(7),實時監控的工具有zabbix和nagios,監控的目的是為了確保mysql執行是否是正常的。同時也是為了修改配置優化I/O,有一個實時監控作為一個衡量標準,比較優化前後是怎麼樣的。
針對(8),相關的智慧財產權法律還是要懂的,不懂法是一件很可怕的事情,所以這裡要強調一下,程式設計師還是得多多瞭解一下法律,之所以強調是因為程式設計師大多比較老實本分,性格比較內向,但是往往也是容易被罪惡傷害的一方,比如之前WePhone創始人被逼自殺。所以說前車之鑑在此,IT的小夥伴們要多多注意。
針對(9),維護適當介質上的存檔或者備份資料,這裡要說一下,適當的存檔分門別類為的是,以後如果查詢起來或者是恢復起來有一個依據和標準,特別是備份,萬一因為某某不慎操作導致資料丟失,如果沒有實時備份的話,那麼就挺坑爹的。作為DBA,其資料備份和恢復是必要的手段。
針對(10),其實和(9)的道理是一樣的。
作為DBA的核心目標:保證資料庫管理系統的穩定性、安全性、完整性和高效能。
另外稍微說一下,
資料庫開發工程師與資料庫管理員的區別,區別如下所示:
(1)資料庫開發工程師的主要職責是設計和開發資料庫管理系統和資料庫應用軟體系統,側重於軟體研發;
(2)DBA的主要職責是運維和管理資料庫管理系統,側重於運維管理;
小結:
今天主要側重點在於DBA的職責和目標,DBA同運維也一樣,有些時候還是很容易淪為專業背鍋戶的。接下來我將會側重寫怎麼做會更好。
我目前用的比較多的是MySQL。我的很多朋友,他們的公司也是用MySQL。MySQL博大精深,在此推薦一本書《高效能MySQL》。這本書是MySQL的創始團隊寫的,很不錯很好,不過閱讀起來可能會有一定的難度,專業DBA手頭必需書,同時也是全棧工程師手頭必備書。建議有使用MySQL開發一年以上的大中型應用的朋友們,都可以看看。我相信你們看到這本書一定會有不少的啟發的。