HTML5技术

致DBA:为什么你经常犯错,是因为你做的功课不够 - 飞鸿无痕

字号+ 作者:H5之家 来源:H5之家 2017-05-21 08:00 我要评论( )

专职做DBA已经6年多的事件了,看同行、同事犯了太多的错误,自己也犯了非常多的错误。一路走来,感触非常深。然而绝大多数的错误其实都是很低级的错误。有的是因为不了解某个引擎的特性导致;有的是因为对线上环境不了解导致;有的是因为经验不足导致;一路

专职做DBA已经6年多的事件了,看同行、同事犯了太多的错误,自己也犯了非常多的错误。一路走来,感触非常深。然而绝大多数的错误其实都是很低级的错误。有的是因为不了解某个引擎的特性导致;有的是因为对线上环境不了解导致;有的是因为经验不足导致;一路上,跌跌撞撞,从小公司DBA,到腾讯高级DBA,再到现在的金融数据库DBA。 不由得想起5年前的我,刚进入DBA行业,缺乏经验,经常犯错误,不是我不够努力,更多的是初来咋到的我根本不知道应该在哪方面下功夫。本文就是基于这方面的考虑,根据自己在DBA这个职业上走过的弯路,总结一些方法给DBA的同行。希望本文能给同行DBA或者运维的朋友们带来一些改变,让大家知道作为一个DBA需要在哪些方面下功夫。下面主要从环境、数据安全、常规操作、预案、架构、心态等层面,同时也会介绍一些实用的经验。

<1>环境篇

毫无疑问,DBA是需要综合技能最多的一个职业,需要你有网络、操作系统、文件系统、数据库、安全、编程等知识。作为DBA,为了少犯错误,你首先得非常熟悉你负责的数据库环境,大到网络环境、系统环境、数据库环境(这里主要以mysql为例)。如果不熟悉环境,很容易因为自身操作考虑不周而导致线上的故障。想想就知道,有多少DBA因为alter操作导致的线上故障?有多少DBA忽略了字符集的问题导致了线上的乱码?又有多少DBA由于迁移的时候没有备份触发器或者event导致的故障?太多的教训足以让我们所有的DBA认识到熟悉环境的重要性。另外DBA对线上环境如果足够了解,在处理故障、讨论处理方案等,都能极大地增强我们的自信,更好地提升自己的影响力。我们可以说不熟悉环境的DBA不是好DBA。下面来介绍环境部分我们DBA应该注意的问题:

1、软件环境

1.1 操作系统环境

针对操作系统部分,你可能需要了解的是使用的操作系统类型,linux or windows,该系统做了哪些内核的优化,尤其是针对数据库,比如文件描述符、配置ntp、raid的写cache模式等,另外你还要对系统的运行状态有大致的了解,CPU使用、内存使用、IO使用以及网络带宽和包量的情况。

1.2 数据库环境

数据库环境包含的内容就非常多了,这里只介绍如果不了解比较容易造成误操作的部分:

1.3 部署方式

对于数据库的部署,我们需要了解数据库是如何部署的,部署在了什么目录,可执行文件、数据文件、log文件、配置文件等的存放路径,数据库如何启动和停止等

1.4 使用引擎

了解目前数据库默认使用的引擎,以及现有的表使用的引擎,提前清楚地了解各个引擎的特点和使用,避免在出现数据迁移、表损坏以及启动问题手忙脚乱导致误操作。(我们的技术就像武器库,都是靠平时闲淡中的积累和打造,在出问题的时候直接从武器库拿来使用,因此要经常丰富我们的“武器库”)

备注:虽然现在基本使用的都是innodb引擎,但是,你也同样可以发现有的还用了Myisam,甚至还有的用到了memory、merge、spider、tokuDB等。

1.5 同步方式

目前mysql基本都会配置同步(如果没有一定要加上,除非是数据丢了或者长时间故障也没关系的库),既然涉及到同步就会有多种不同的方式。比如常见的分类:

基于binlog和pos的同步

基于GTID的同步

异步

半同步

单线程同步

多线程同步

针对这些同步,都有一些不同的特点,比如出现问题了,需要跳过某个位置,gtid的同步和基于pos的同步操作就不一样,同步方式也是你必须掌握的技巧。

1.6 版本

在维护数据库的时候,还需要了解当前数据库使用的大版本。因为数据库的大版本的功能会有很大的差异,有很多特性是只存在某个大版本的,因此了解使用的版本能让你大致知道当前数据库支持哪些特性。在涉及到迁移、同步、数据库升级等操作的时候,能从容应对。

1.7 存储过程(procedure)、事件(event)

了解当前数据库是否存在存储过程和事件,在数据备份、数据迁移的时候,需要将对应的存储过程和事件的参数添加进去,另外如果存在事件,在迁移的时候会有特殊的操作,在迁移的目标机器要现将事件关闭,切换后再打开。防止事件导致数据不一致。

1.8 关键配置

mysql有几项非常关键的配置,需要了解清楚,避免由于配置没搞清楚导致误操作,总结关键配置如下:

innodb_buffer_pool_size

#对innodb生效,对性能影响非常大,一般可以设置内存的50~80%

key_buffer_size

#对Myisam生效,建议修改成innodb

innodb_flush_log_at_trx_commit

#innodb的redo日志刷新方式,对innodb的影响会很大,一般设置为2

log-bin

#是否开始binlog,如果没有开启,一定要开启

sync_binlog

#刷binlog的方式,一般设置为0,如果对数据需要强一致的,可以将sync_binlog设置为大于1的数,兼顾安全和性能

innodb_file_per_table

#采用独立表空间,建议都设置成独立表空间,不然后面磁盘空间满了,删除表空间也无法释放,必须做数据迁移

lower_case_table_names

#表明区分大小写

character_set_server

#字符集在迁移、数据库变更、数据导入等都是必须要注意的,不然数据乱码了就会很麻烦

max_connections

#最大连接数不能设置太大,要计算一下session内存*max_connections + 固定内存 < 总内存-2G(这2G用来做系统内存,留给系统的内存可以再设大一点)

transaction_isolation

#设置隔离级别,默认是Repeatable Read,如果是binlog是row模式,也经常设置为Read Committed级别

所有上面说的参数,都需要深入了解和熟悉,当我们在做数据迁移的时候或者搭建mysql的时候,一定要比对一下和源实例的配置(比对工具可以参考pt-config-diff工具),以免迁移完成后由于参数不一致,中途要重启实例的情况。在这个问题上,我见过太多的教训,希望大家能吸取教训,减少故障和问题的发生。

1.9 数据库环境收集工具介绍

前面我们介绍了数据库的相关的环境,对于那么多的环境变量,我们如何更好的去收集,这里给大家介绍一个工具

pt-mysql-summary

这个工具的具体用法可以google了解,也可以访问如下链接了解,不在本文的论述范围:

https://www.percona.com/doc/percona-toolkit/2.1/pt-mysql-summary.html

2、硬件

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 为什么我会被淘汰? - KMSFan

    为什么我会被淘汰? - KMSFan

    2017-05-02 08:01

  • 为什么企业宁愿开高工资给新员工,都不愿意给老员工加工资? - 张传波(Fireball)

    为什么企业宁愿开高工资给新员工,都不愿意给老员工加工资? - 张传

    2017-02-16 14:00

  • 微信小程序为什么不被看好? - 周全520

    微信小程序为什么不被看好? - 周全520

    2017-02-07 08:00

  • 我为什么不看好微信小程序 - 沉默的老虎

    我为什么不看好微信小程序 - 沉默的老虎

    2017-01-22 18:00

网友点评
$