数据库管理员(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开发一年以上的大中型应用的朋友们,都可以看看。我相信你们看到这本书一定会有不少的启发的。