被小伙伴们吓哭了:可怕的命令

郑昀 创建于2014/5/19
最后更新于2014/5/22
友情赠送一篇:被小伙伴们蠢哭了的那些事儿:找回密码篇
(2014-01-13)

  1. 杀手级命令:rm -rf

    • 2014-5-17-某软件公司在生产环境误删数据库文件

      • 悲剧一:

        • 妹子在生产服务器上本意删除Oracle,但脚本中有一句:rm
          -rf $ORACLE_BASE/*

        • 不幸变量 ORACLE_BASE 未赋值

        • Tomcat/MySQL...全删了

        • 事故发生后,没有及时发现,造成部分数据写入磁盘,加大了不可恢复的几率

      • 悲剧二:

        • 找到脱机备份,发现备份文件只有1KB,里面只有几行熟悉的
          mysqldump 注释。可用的、最接近的备份时间是2013年年底

      • 应对:

        • 把盘 umount,防止继续有数据写入

        • 把盘以只读方式挂到另一台服务器上进行操作

        • 用 ext3grep 工具恢复出了 MySQL 几个 binlog 文件

        • 将 binlog 文件复制到测试服务器,运行 mysqlbinlog /usr/mysql-bin.000010 | mysql
          -uroot -p 命令,执行 binlog 还原

        • 数据成功恢复

    • 2013-6-26-”下厨房“误删数据库主节点分区

      • 悲剧一

        • 意图重建备份节点,需要把原来的从节点删除,重新安装,所以先使用了 rm -f 方式删除备份节点分区上的所有文件

        • 5分钟后,发现刚才删除的是数据库主节点的分区

      • 悲剧二

        • 由于4月23日数据库主节点迁移并升级到 MySQL 5.5,导致备份任务停止

        • 在长达两个月的时间里,一直没有将数据库备份节点恢复工作提上日程

        • 只有主节点上开启了 binlog

      • 应对

        • 把整个分区 dd 成镜像,准备做将来硬盘恢复的备份

        • 把 memcache 里的数据 dump 出来,以备可能的恢复(郑昀注:但只 dump 了一半,有人把服务重启了)

        • 重新启用原来的从数据库,由于数据时间只到4月23日,需要调整近两月表结构变更,让最新的代码可以跑起来

        • 联系上沃趣科技和北亚数据恢复中心,到7月1日上午,北亚数据恢复中心提取到几乎是完整的 ibdata1
          文件,至7月2日凌晨4点,恢复了这次得到的所有数据

        • 7月2日下午4点,北亚提取到 ibdata1 剩下的文件碎片,得到了完整的 ibdata1 文件,MySQL
          无报错启动,从而得到了6月26日凌晨事故前的完整数据库

    • 郑昀注1:对上述两个事件,都是”在MySQL运行情况下通过rm -rfs删除数据库文件“,那么文件到底删了吗?请看下厨房的事后总结:

      • 『事后从沃趣科技的数据库工程师那里得知,我们第一时间停止 MySQL
        防止硬盘继续写入这个应急措施是错误的,即使分区完全没有文件,MySQL
        的进程继续运行,只要保留这个现场,可以从内存中获取更多的数据库结构信息
        ,对恢复数据非常有帮助。』

    • 郑昀注2:有人认为第一时间应该停止 Web 服务,而不是停止 MySQL 实例

  2. Redis 的 shutdown 命令

    • 据传,某东电商网站在某年双十一前出过一次不小的事故,原因居然是程序中要断开 Redis 的链接(命令应为:disconnect),但代码中写的是
      shutdown……——Fenng

  3. rsync 的源目录和目标目录写反了

    • 悲剧的是,rsync 不仅同步很快,删除文件速度也很快,你把一个空目录当成源,那真正的源目录的数据瞬间消失……

总结:

备份是王道。

备份的可恢复性检查是王道中的王道。

保持清醒(严禁饮酒操作¥%#^)。

遇事冷静。

参考资源:

1,老周,2014,一次心惊肉跳的服务器误删文件的恢复过程

2,下厨房,2013,下厨房6月26日数据丢失事故总结


赠图1枚:

时间: 2024-07-30 17:00:08

被小伙伴们吓哭了:可怕的命令的相关文章

小伙伴们手滑集

郑昀 创建于2015/5/28 最后更新于2015/5/29 关键词:误删除.线上事故.误操作. 本文档适用人员:全体技术人员 携程旅行网的技术团队今天注定是一个不眠之夜,我的猜测是自动化运维系统过于强大以至于误操作后覆水难收,加之历史悠久规模庞大各种新老系统交错,全面从新部署与平常迭代上线肯定不一样,难度系数更高. 这也就是为什么过去我反复强调审计历年来对我们做的企业内部安全审计非常重要,他们提出的意见,我们必须认真审视认真去落实. 为了警醒各位技术人员,下面列出本次携程误操作事件引发的各种手

安全基础教育第二季第1集:屡战屡败的找回密码

郑昀 创建于2015/5/19 最后更新于2015/8/7 关键词: Web安全.系统安全.Web开发.找回密码.重置密码 本文档适用人员:广义的技术人员 提纲: 堡垒是从内部攻破的 员工无知者无畏 运维配置暴露细节 后台不设防 常犯常新,屡战屡败 找回密码 图形和短信验证码 平行权限 MD5等于明文 处处留心皆学问 表单被篡改 App被篡改 跨站请求伪造 0x00. 前言: 第一季培训主要宣导两点,第一,白帽子或黑客都很有耐心,他手里可能捏着你多个漏洞,他一直在等机会,他也有很多工具在扫在寻找

利用命令行删除Android系统自带应用的方法

一般来说,手机厂家都会在手机中内置许多应用,而这些应用是使用一般的应用程序管理无法删除的.当然,现在有一些APP,如360和豌豆荚,在获取了系统的root权限之后是可以删除自带应用的.但是如果我不想让一个app来获取我的root权限呢?有没有方便.快捷的方法呢? 当然有,那就是利用shell命令.当然,首先要安装当前手机的驱动程序,否则无法进行调试. 在如何删除Android系统中的内置应用一文中作者也介绍了利用命令行删除系统应用的方法,但是个人感觉太麻烦了,其实有更简单的方法,只要三步即可:a

RNA-Seq分析软件HTSeq的安装

1.本人刚开始安装的时候,先下载相关的软件包,然后安装installtion中的方法安装, 运行的时候老是报错.根据错误提示安装解决方法.也参考了其他的笔友的一些建议, 发现特别麻烦,后来无意中发现有小伙伴用bioconda来安装,一个命令,简单快捷. 2.bioconda安装HTSeq操作如下: 下载安装miniconda(即bioconda). 添加channels 等等 (具体步骤参考本人的相关bioconda的博客) 安装HTSeq的命令如下: conda   install  HTSe

oracle学习入门系列之三Unix、Linux历史及基础

终于翻过了前面两篇,喝杯咖啡提下神,咱们继续前行.这次我们要进行操作系统方面知识了,考虑到当前时间上操作系统的多样性.变化性等,蛤蟆斟酌再三,决定还是Unix/Linux比较符合我们的实际. 开始之前不得不又提几个问题: 1.  Unix 从哪里来 2.  Linux从哪里来 3.  Unix/Linux什么关系 4.  怎么入手这系统 哎呀,看见这些问题蛤蟆就有点老激动了,最喜欢唠嗑的就是这些鸡皮蒜毛的事情了.让我们赶紧开始吧~~不急,留个邮箱先 本人邮箱:[email protected]

SVN客户端的安装与基本操作

前言: svn服务器已经搭建好,通过命令行的方式访问服务器是一种方式,对于刚刚接触svn的小伙伴们要额外的学习一些命令,这样不利于svn在实验室的普及,svn客户端是一个很好的解决方案. svn服务器与客户端工作流程: TortoiseSVN简介: TortoiseSVN是一个Windows下的版本控制系统Apache Subversion的客户端工具. TortoiseSVN安装: TortoiseSVN下载地址 安装直接安装提示下一步. 在任意目录右击鼠标显示如下,说明安装成功: Torto

Linux系统下文件删除的恢复方法

对于rm,很多人都有惨痛的教训.我也遇到一次,一下午写的程序就被rm掉了,幸好只是一个文件,第二天很快又重新写了一遍.但是很多人可能就不像我这么幸运了.本文收集了一些在Linux下恢复rm删除的文件的方法,给大家作为参考. 首先,最好的方法是避免这个问题,以下是几点建议: 1.rm -rf误操作的后果是可怕的,rm -f也要三思而行,不能轻易使用. 2.做好数据备份. 3.用一些策略避免出错: 提倡在shell下用 TAB 补全,用脚本执行任务,减少出错的机会.或者编写一个脚本,起名rm,在脚本

mtr命令详解

不管是做网络管理还是做系统运维,都会出现一些网络链路问题,大多数人都知道PING命令,可以简单的测试网络的连通性,但是却无法确定是在哪里出现了问 题,有些人就会用tracert命令来查看途经路由,或者用nslookup命令来查看DNS是否可用(话说这命令我都没怎么用过),如果三个命令都用的 话就太浪费时间了,也太麻烦了,但是如果只用其中一个命令的话,又不好排查,这时候就要用到mtr命令了,Mtr是 Linux中有一个非常棒的网络连通性判断工具,它结合了ping, tracert,nslookup

Linux下 nginx+tomcat配置https的总结和遇到的坑

证书的获取略 服务器的端口443确保外界网络能够进行访问. 是否配置https: nginx:是 tomcat:否 1.首先查看nginx是否支持SSL. 参考链接: 实战http切换成https 查看nginx支持SSL [[email protected] bin]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.13.3 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) b