热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

岁末警示:当你手抖删了线上数据库..

这是一篇写在2016年初的旧文,岁末再次与你共享

编辑手记:这是一篇写在2016年初的旧文,岁末再次与你共享,愿你的系统安然无恙。本文转载自高效运维社区。


作者简介:


一乐,aka 梁宇鹏

现任环信首席架构师兼IM技术总监,负责即时通讯云平台的整体研发和管理。曾任新浪微博通讯技术专家,负责微博通讯系统的设计与研发。

2016年1月18日,新年刚过,距离噩梦的圣诞节已经过去三周。已经好多天没有线上报警,群里一片安静,大家都在享受这份宁静与安逸。唯一不一样的是,有集群的迁移工作要做,相关人员干劲十足,已经连续三天通宵。按照惯例,为了保险起见,线上操作都在夜里进行。

如果说这几天最怀念的时光,也许就是这一天了,因为在第二天,我们的一个线上数据库出了问题。

19日上午10点,陆续有用户抱怨,一个接口的数据丢失,而之前删除的数据又出现了。这时候我们的运维同事贴出一个截图,发现有一个数据同步的进程,从凌晨五点开始运行,把线上数据库覆盖,数据一夜回到了解放前!

好在运气好,在这个覆盖发生之前,有一个备份。

修复工作马上展开,先把主从切断,主库利用备份数据重启,从库用来进行比对,恢复增量数据……(部分内容由于当地政策,未予显示)

然而事情并没有结束。这时候内部出现了一个声音高喊,我们一定要惩罚!惩罚这个人,让他知道服务稳定性的重要!

有没有觉得似曾相识?类似的情况其实经常发生。而很多事情就是这样,好像是日常中的一个插曲,却对团队和公司的发展产生着微妙又长远的影响。

是的,我说的是惩罚。


让我们看看惩罚是做什么的

以儆效尤?如果当事人玩忽职守,故意破坏,也许有一些作用。我这里用了也许,因为真出现这种情况的话,可能不是惩罚就够了的。但如果价值观没有问题,这点却未必有效。因为事故已经可以对当事人造成足够压力,增加罚款并没有什么必要。

解气么?公司变大必然出现分工,而各个团队之间的沟通也会变弱。每出现一个问题,其实都是整个公司的问题,用户需要安抚,市场需要维护。这时候就很容易发出一种声音,你看你总给我们添麻烦。这种指责和随后的处罚除了让发声的人心里痛快,该做的事情并没有减少。

它们并没有创造什么价值,却带来了很多你不想要的东西。

更差的工作表现。因为惩罚带来的畏首畏尾,以及随之而来的挫败感,都会让一个人的工作效率大打折扣。

错误的工作态度。谁都知道疲劳作战效率不高容易出错,既然多做多错,少做少错,为什么要去加班加点赶什么进度呢?多一事肯定不如少一事。

隔阂的团队。出了问题就开始指责,那出问题之前的加班加点为了谁呢?一个彼此间互相信任的团队与一个互相防备的团队,差距也是显而易见。

最重要的是,它让技术团队偏离了对技术的追求,而把目光收回到内部关系上,这自然会放慢前进的步伐,这对创业公司将是致命的。

速度是小公司取胜竞争对手直至打败大公司的关键。


不要惩罚不意味着拒绝进步

我们这么做,是因为我们也相信,促使个人和团队成长的,应该是团队的荣誉感和为之努力的心,而不是对惩罚的恐惧。

但我们也不能停在这个地方。如果连自己的教训都无法总结并长成经验,也注定是悲剧的。所以还是回归本初,看看真正想要的是什么。

我们想要的,不过是避免类似事情的发生。

先看一则旧闻。

2015年10月20日,德意志银行外汇部门的一名初级交易员将一订单中的「净值」错误处理为「总额」,令德意志银行向一家美国的对冲基金客户白白送出了60亿美元。 http://wallstreetcn.com/node/224923

这种输入上的低级错误,金融业里叫胖手指,而避免的最重要的方法就是两人法则,我也更喜欢它第二个名字,四眼原则(four eyes principle)。
https://en.wikipedia.org/wiki/Fat-finger_error

它提醒了我们,在关键业务上需要有人结对。鉴于现在工作的远程状态,我们使用了Tmux的会话共享模式,两个人可以通过相同的会话来共享控制台以及键盘输入。


技术可以做到更多

四眼原则用来做紧急措施是可以的,但毕竟有交互成本。而人在精确性上天生不如机器,因此要确保问题不再发生,还要用一些技术手段才行。

由于命令执行的是一个历史命令,而出错的运维人员进入了一个前人遗留的Tmux会话,或者是按了向上或者是进入时的回车直接执行了CTRL-R留下的命令。于是我们

修改了数据恢复的命令,强制进行二次确认;
对危险命令进行了别名处理;
禁止了Tmux的默认session,使用Tmux的人员强制使用别名。

所以你看,人的问题也可以用技术手段来解决。


技术驱动和技术导向

互联网发展仍是日新月异,挑战无处不在。要想变挑战为机遇,只有创新和技术才有可能。只有重视技术的公司,才能充分发挥技术人员的能动性,也将更容易在技术的竞争中胜出。

我们经常开玩笑,很多公司,做不到技术驱动,因为他的每一步都是领导提出领导拍板,它只能叫领导驱动。而如果一个公司在遇到事情之后就总是想到惩罚,不注意保护和发挥技术人员的能动性,技术导向也只能是一个口号。

说到底不过一句话。一个团队或公司,要变成什么样子,跟她迈出的每一步都有关系。

毕竟罗马不是一天建成的。

如何加入"云和恩墨大讲堂"微信群

搜索 盖国强(Eygle)微信号:eyygle,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。


近期文章

基于Oracle公有云的备份与恢复

苦海岸边,GR的基础知识

Oracle 12c Global Data Services

以12c Identity类型示范自我探索式学习方法

从执行计划洞察ORACLE优化器的“小聪明”

Oracle安全比特币勒索问题揭秘和防范



推荐阅读
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • HashMap的扩容知识详解
    本文详细介绍了HashMap的扩容知识,包括扩容的概述、扩容条件以及1.7版本中的扩容方法。通过学习本文,读者可以全面了解HashMap的扩容机制,提升对HashMap的理解和应用能力。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
author-avatar
0523wei
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有