MySQL是一个跨平台的开源关系型数据库管理系统,目前MySQL被普遍地应用在Internet上的中小型网站中。因为其体积小、速度快、整体拥有成本低,尤为是开放源码这一特色,许多中小型网站为了下降网站整体拥有成本而选择了MySQL做为网站数据库。随着MySQL在互联网上被普遍使用,在数据库领域的地位爆炸式的提高,BAT等各互联网的去IOE,大量的使用MySQL做为核心数据库,MySQL DBA的市场需求量日益剧增,好的MySQL DBA更是各个互联网公司抢手的人才。愈来愈多的IT人才开始转型作DBA,那么做为一个DBA,首先要明白做为一个DBA的核心目标也是终极目标:保证数据库管理系统的稳定性、安全性、完整性和高性能。mysql
MySQL DBA大概能够分为两种:一种是开发DBA,一种是运维DBA,这里说的MySQL DBA是指运维DBA。通常意义上的DBA指的是运维DBA,只是负责数据库的运营和维护,包括数据库的安装、监控、备份、恢复等基本工做,而高级或资深 DBA职责比这个大得多,须要覆盖产品从需求设计、测试到交付上线的整个生命周期,在此过程当中不只要负责数据库管理系统的搭建和运维,更要参与到前期的数据库设计,中期的数据库测试和后期的数据库容量管理和性能优化。面试
对于运维DBA来讲,主要的职责为如下几点:sql
监控:对数据库服务运行的状态进行实时的监控,包括数据库会话、数据库日志、数据文件碎片、表空间监控、用户访问监控等,随时发现数据库服务的运行异常和资源消耗状况;输出重要的平常数据库服务运行报表以评估数据库服务总体运行情况,发现数据库隐患;监控对于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必备的,只是基础而已,若是谈优秀的话,那么良好的性格和态度决定你能够在职业生涯中能走多远。
大道理你们都懂,真正能实实在在落实到实际的很少,也正是这些为数很少的人,成为业内的中坚,所谓的大牛!最后想说的是,各个行业中没有最牛,只有更牛,学无止境,在学习和实践中完善、强化本身的各方面能力,不断的提高本身。踏踏实实作事,堂堂正正作人,改变不了别人,尽最大的努力,作最好的本身!!