MySQL 是一个跨平台的开源关系型数据库管理系统,目前 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。
随着 MySQL 在互联网上被广泛使用,在数据库领域的地位爆炸式的提升,BAT 等各互联网的去 IOE,大量的使用 MySQL 作为核心数据库,MySQL DBA 的市场需求量日益剧增,好的 MySQL DBA 更是各个互联网公司抢手的人才。
越来越多的IT人才开始转型做 DBA,那么作为一个 DBA,首先要明白作为一个DBA的核心目标也是终极目标:保证数据库管理系统的稳定性、安全性、完整性和高性能。
MySQL DBA 大概可以分为两种:一种是开发 DBA,一种是运维 DBA,这里说的 MySQL DBA 是指运维 DBA。
一般意义上的 DBA 指的是运维D BA,只是负责数据库的运营和维护,包括数据库的安装、监控、备份、恢复等基本工作,而高级或资深 DBA 职责比这个大得多,需要覆盖产品从需求设计、测试到交付上线的整个生命周期,在此过程中不仅要负责数据库管理系统的搭建和运维,更要参与到前期的数据库设计,中期的数据库测试和后期的数据库容量管理和性能优化。
对于运维DBA来说,主要的职责为以下几点:
1监控
对数据库服务运行的状态进行实时的监控,包括数据库会话、数据库日志、数据文件碎片、表空间监控、用户访问监控等,随时发现数据库服务的运行异常和资源消耗情况;输出重要的日常数据库服务运行报表以评估数据库服务整体运行状况,发现数据库隐患。
监控对于DBA来说是至关重要的,是DBA的第三只眼睛,利于监控可以自动处理一些常规的故障,提前发现并解决潜在隐患,监控对于运维是必备的技能。
如果你不懂监控,那么你就不是一个称职的运维人员。
2备份
制定和实施数据库备份计划,灾难出现时对数据库信息进行恢复,维护适当介质上的存档或者备份数据。对数据库的备份策略要根据实际要求进行更改,数据的日常备份情况进行监控。
备份大概分为两种:一种是定时、计划性的备份,包含全备和增量备份,常用的工具一般为 mysqldump 以及 xtrabackup 为代表的第三方备份工具;一种是执行 DML 时更新和删除的备份,这种备份一般有以下几种备份方式:一种为 create tablexxx_mmddhhmm select 的方式备份到表中,一种是 mysqldump 加上条件做备份,还有一种是 select into oufile 等几种方式,防止执行错误时可以快速的恢复。
在日常对数据库的操作中,特别作为一个 DBA,永远要给自己留一个后手,保证在需要进行数据恢复的时候可以随手拈来。
3审计
为不同的数据库管理系统用户规定不同的访问权限,以保护数据库不被未经授权的访问和破坏。例如,允许一类用户只能检索数据,而另一类用户可能拥有更新数据和删除记录的权限。4故障处理
对数据库服务出现的任何异常进行及时处理,尽可能避免问题的扩大化甚至中止服务。
这之前 DBA 需要针对各类服务异常,如机房/网络故障、程序b ug 等问题制定处理的预案,问题出现时可以自动或手动执行预案达到止损的目的。在故障处理中,DBA 的反应至关重要,可能在分分钟钟的时间内,小的故障引发大的故障,对业务的影响更大,这个非常考验 DBA 的应急能力和应变能力。对于常见的故障,比如连接数突然增多、数据库服务器空间的清理、主从同步延迟、CPU 使用过高等,可以和研发一起制定相应的预案,并且和监控结合,当达到一定的阀值,使用相应的脚本自动处理,这样在一定程度上减少 DBA 的工作量、提高故障处理效率,更重要的是可以为 DBA 争取一定的时间,防止故障升级对业务带来更大的影响。
5容量管理
包括数据库规模扩张后的资源评估、扩容、机房迁移、流量调度等规划和具体实施。
6数据库性能优化
产品对外提供服务最重要的一点是用户体验,用户体验中非常重要的是产品的可用性和响应速度。而如何用最合理的资源支持产品提供高可用和高速度的用户体验,这也是 DBA 的重要职责。
在多年的 DBA 生涯中,个人对数据库故障的总结为:
80%的甚至更高的故障来自变态的SQL语句;
10%左右的来自数据库架构方面设计的不合理;
10%左右的来自硬件、OS 层面。
那么基本的优化重点就就是对 SQL 的优化,这个需要给研发人员进行 MySQL 开发规范进行培训,制定严格的 SQL 准入规则,审核每一条上线的 SQL 语句,在 SQL 源头上堵住大部分,然后就是对慢 SQL 的监控分析,定期的发给研发进行整改,并督促研发在限定的时间内整改。这部分的工作较为繁琐平淡,但是执行好了,可以杜绝很多不必要的故障,保证业务的高效、稳定运行,这一部分工作非常考验 DBA 的基础理论知识,考验 DBA 的责任性和工作的毅力。
个人认为,一个好的 DBA 所需要具备的基本技能包含:
理解数据备份/恢复与灾难恢复、DBA 常用工具集的使用、知道如何快速寻找答案、知道如何监控和优化数 据库性能、尽可能实现自动化、容量监控与规划、索引设计、数据库设计、数据库安全性、持续不断地学习和研究新版本、可以单独的编写独立的或者系统的功能脚本。
这些技能基本涵盖 MySQL 基础理论知识、OS 层面知识、硬件知识、网络知识、代码编写能力、架构设计规划能力、监控、运维理念、运维自动化等。因此,做一个 DBA,不单纯的数据库层面的,基本知识涵盖很多层面,因此可以说 DBA 综合知识极高的复合型专业人才。
最后想说各个行业中没有最牛,只有更牛,学无止境,在学习和实践中完善、强化自己的各方面能力,不断的提升自己。顺便给大家提供一套我之前学习DBA的视频教程 。下载地址:https://pan.baidu.com/s/1hrLZKl2#list/path=%2F