现在数据库高可用架构比较多,不管是单纯地使用主从架构、MHA、MMM、ndbcluster或是集成了LVS、keepalived等组件,我们都不应该仅仅停留在正常情况下会搭建、操作和使用对应的架构。更多的是,我们需要更深入的去了解里面运作的机理。就以MHA为例,它是如何检测某一个实例异常的?各个组件之间如何配合?当做切换的时候,MHA是如何保证数据的一致性?如果后端有多台slave,它是如何选择哪一台从机做切换,并且,其他从机如何处理?只有深入了解了逻辑之后,在遇到故障和问题,你就能更快速的进行定位,减少对业务的影响。此外你还能有针对性的做自动化,让自己工作更轻松。这么好的事情,为什么不践行一下?
3、了解业务还有一个问题,就是作为DBA要尽可能的去了解业务,了解业务的读写模型,了解业务相关架构,了解业务如何使用数据库。这样做的好处是你能针对业务的场景给出更好的优化建议,出了问题也能快速判断对业务的影响情况。
<5>线上操作篇(经验)DBA面对线上复杂的环境,尤其是面对高并发的环境,很容易导致线上故障,下面是整理的一些容易导致线上故障的操作以及规避误操作的技巧,希望能对各位DBA有所帮助:
1、修改或删除数据前先备份,先备份,先备份(重要事情说三遍)
2、线上变更一定要有回退方案
3、批量操作中间添加sleep
4、DDL操作要谨慎,对于大表的alter操作最好使用pt-online-schema-change
5、变更操作先在测试环境测试
6、重启数据库前先刷脏页
7、禁止批量删除大量的binlog
8、对于变更操作一定要写详细的操作步骤,并review
9、按enter之前再进行一次环境确认
10、如果你的操作可能会使状况变得更糟,请停止操作
11、快速处理磁盘满,使用tune2fs释放文件系统保留块
12、连接数满先修改内存变量,而不是重启,修改方式如下:
gdb -p pid -ex "set max_connections=1000" -batch
#pid是mysqld的对应的pid
<6>心态篇 1、心细胆大从某种意义上讲,DBA是一个高危的行业,不是开玩笑,看看下面的截图就知道:
风险本身是个伪命题,对于某些人来说是风险,但是对于某些人来说其实没有风险。就像医生做手术一样,我们常人看来就是个非常危险的事情,但是对于医生来讲,其实并没有什么风险(大部分的手术)。因此风险在于你是否已经了解深入,并且做足了功课。这就要求我们在做线上操作之前要心细,有详细的操作步骤,有想尽的回滚方案,做完备的测试。这些做完了以后,你的胆子才能”大“起来,胆大是因为你心中有底,心中有自信。这些自信都是前面你做功课带给你的。
2、勇于担当出现问题本身并不可怕,可怕的是选择逃避。我们要做的就是正视问题,吸取教训,勇于担当。做好case study,防止团队在同一个地方跌倒两次。
3、工匠精神今天看到同事发的一个朋友圈很有感触,在没有人注意的地方也不懈怠、不偷懒的精神,才是真正的工匠精神。做为DBA也同样非常需要这种精神,对于遗留问题的跟进不能偷懒;对于备份异常的巡检不能偷懒;对于技术的积累不能偷懒;工匠精神是我们DBA在做日常管理工作不可缺少的精神。
有句话说的是:”我们之所以经常犯错,就是因为我们做的功课不够“。如果你有很多功课拉下了,请安排事件逐步补上,要坚信一切都是闲淡中求来,热闹中使用。有的事情知道了本身并没有什么了不起,了不起的是那些坚持践行的人。践行起来,你会发现你的人生从此不同。
备注:原创作品,转载请著名出处!