1. 程式人生 > >說說DBA職責和目標

說說DBA職責和目標

dba tab 合同 參考 穩定性 員工 min 想法 blog

數據庫管理員(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開發一年以上的大中型應用的朋友們,都可以看看。我相信你們看到這本書一定會有不少的啟發的。

說說DBA職責和目標