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