点击上方"搜云库技术团队"关注

选择"设为星标"
技术/ 架构 / 资料 / 工作 / 内推

经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据。对本次事故过程和解决办法记录在此,警醒自己,也提示别人莫犯此错。也希望遇到问题的朋友能找到一丝灵感解决问题。

事故背景

安排一个妹子在一台生产服务器上安装Oracle,妹子边研究边安装,感觉装的不对,准备卸载重新安装。从网上找到卸载方法,其中要执行一行命令删除Oracle的安装目录,命令如下:

  1. rm -rf $ORACLE_BASE/*-rf $ORACLE_BASE/*

如果ORACLE_BASE这个变量没有赋值,那命令就变成了

  1. rm -rf /*-rf /*

等等,妹子使用的可是root账户啊。就这样,把整个盘的文件全部删除了,包括应用Tomcat、MySQL数据库 and so on。。。。

MySql数据库不是在运行吗?linux能删除正在执行的文件?反正是彻底删除了,最后还剩一个tomcat的log文件,估计是文件过大,一时没有删除成功

看着妹子自责的眼神,又是因为这事是我安排她做的,也没有跟她讲清厉害关系,没有任何培训,责任只能一个人背了,况且怎么能让美女背负这个责任呢?

打电话到机房,将盘挂到另一台服务器上,ssh上去查看文件全部被清,这台服务器运行的可是一个客户的生产系统啊,已经运行大半年了,得尽快恢复啊。于是找来脱机备份的数据库,发现备份文件只有1kb,里面只有几行熟悉的mysqldump注释(难道是crontab执行的备份脚本有问题),真是屋漏偏逢连夜雨啊。

想起来一位领导说过的案例:当一个生产系统挂掉以后,发现所有备份都有问题,刻录的光盘也有划痕,磁带机也坏了(一个业界前辈,估计以前还用光盘做备份了),没想到今天真的应验到我的身上了,怎么办??

部门领导知道情况后,已经做了最坏的B计划:领导亲自带队和产品AA周日赶到客户所在的地市,星期一去领导层沟通;BB和CC去客户管理员那边想办法说服客户。。。

救命稻草:ext3grep

赶快到网上去查资料进行误删数据恢复,还真找到一款ext3grep能够恢复通过rm -rf删除的文件,我们磁盘也是ext3格式,且网上有不少的成功案例。于是燃起了一丝希望,赶快对盘umount,防止重新写入补删文件扇区。下载ext3grep,安装(编译安装过程艰辛暂且不表)。

先执行扫描文件名命令:

  1. ext3grep /dev/vgdata/LogVol00 --dump-names/dev/vgdata/LogVol00 --dump-names

打印出了所有被删除文件及路径,心中狂喜,不用执行B计划了,文件都在呢。

这款软件不能按目录恢复文件,只能执行恢复全部命令:

  1. ext3grep /dev/vgdata/LogVol00 --restore-all/dev/vgdata/LogVol00 --restore-all

结果当前盘空间不足,没办法只能恢复文件,尝试了几个文件,居然部分成功部分失败

  1. ext3grep /dev/vgdata/LogVol00 --restore-file var/lib/mysql/aqsh/tb_b_attench.MYD/dev/vgdata/LogVol00 --restore-file var/lib/mysql/aqsh/tb_b_attench.MYD

心里不禁一凉,难道是删除磁盘上被写过文件了?恢复机率不大了啊,能恢复几个算几个吧,说不定重要数据文件刚好在能恢复的MYD文件中。于是先将所有文件名重定向到一个文件文件中

  1. ext3grep /dev/vgdata/LogVol00 --dump-names >/usr/allnames.txt/dev/vgdata/LogVol00 --dump-names >/usr/allnames.txt

过滤出来所有mysql数据库的文件名存成,mysqltbname.txt

编写脚本恢复文件:

  1. while read LINE do echo "begin to restore file " $LINE read LINE do echo "begin to restore file " $LINE
  2.     ext3grep /dev/vgdata/LogVol00 --restore-file $LINE if [ $? != 0 ]/dev/vgdata/LogVol00 --restore-file $LINE if [ $? != 0 ]
  3.     thenthen
  4.         echo "restore failed, exit" # exit 1 fi"restore failed, exit" # exit 1 fi
  5. done < ./mysqltbname.txt < ./mysqltbname.txt

执行,大概运行了20分钟,恢复了40多个文件,但不够啊,我们将近100张表,每张表frm,myd,myi三个文件,怎么说也有300多个左右啊!!将找回来的文件附到现有数据库上,更要文件权限为777后,重启mysql,也算是找回一部分数据了,但客户重要的考勤签到数据、手机端上报数据(据说客户按这些数据做员工绩效的)还没找回来啊。

咋 办?中间又试了另一款工具extundelete,跟ext3grep语法基本一致,原理应该也一样了,但是据说能按目录恢复,好吧试一试。

  1. extundelete /dev/vgdata/LogVol00 --restore-directory var/lib/mysql/aqsh/dev/vgdata/LogVol00 --restore-directory var/lib/mysql/aqsh

果然不出所料,恢复不出来!!!!!!!!那些文件已被破坏了。跟领导汇报,执行B计划吧。。。无奈之下下班回家(周末了,回去休息一下,想想办法吧)

灵机一动:binlog

第二天早晨一早就醒了(心里有事啊),背上电脑,去公司(这个周末算是报销了,不挨批,通报,罚款,开除就不错了,还过什么周末啊)。

依旧运行ext3grep,extundelete,也就那几招啊,把系统架到测试服务器上,看看数据能不能想办法补一补吧。在测试服务器上进行mysqldump,恢复文件,覆盖恢复回来的文件,给文件加权限,重启mysql。

wait,wait,不是有binlog吗?我们服务都要求开启binlog,说不定能通过binlog里恢复数据呢?

于是从dump出来的文件名里找到binlog的文件,一共三个,mysql-binlog0001,mysql-bin.000009,mysql-bin.000010,恢复一下0001

  1. ext3grep /dev/vgdata/LogVol00 --restore-file var/lib/mysql/mysql-bin.000001</pre>/dev/vgdata/LogVol00 --restore-file var/lib/mysql/mysql-bin.000001</pre>

居然失败了。。。。。。

再看另两个文件,mysql-bin.000010大概几百MB,应该靠谱一点,执行还原命令,居然成功了!!!!!!!!!!!!!

赶快scp到测试服务器。执行binlog还原。

  1. mysqlbinlog /usr/mysql-bin.000010 | mysql -uroot -p/usr/mysql-bin.000010 | mysql -uroot -p

输入密码,卡住了(好现象),经过漫长的等待,终于结束了。打开应用,哦,感谢cctv,mtv,数据回来了!!!!!!!!!!!!!!!

事故总结

经过此次事故,虽然数据很幸运能找回来了,但是过程却是惊心动迫。也为自己的错误所带来的后果,给同事和领导带来的连带责任而后怕。也希望谨记此次事故,以后不再犯同样的错误。事故反思如下:

1、本次安排MM进行服务器维护时没有提前对她进行说明厉害情况,自己也未重视,管理混乱,流程混乱。一个在线的生产系统,任何一个改动一定要先谋而后动。

2、自动备份出现问题,没有任何人检查。脱机备份人员每次从服务器上下载1k的文件却从未重视。需要明确大家在工作岗位上的责任。

3、事故发生后,没有及时发现,造成部分数据写入磁盘,造成不可恢复问题。需要编写应用监控程序,服务一旦有异常,短信告警相关责任人。

根据评论提醒,再加一条:

4、不能使用root用户来操作。应该在服务器上开设不同权限级别的用户。

通过本次事故,几位跟这个项目和事故没有任何关系的同事,主动前来帮忙,查资料,帮测试,有一位同事还帮忙到晚上1点多钟进行数据恢复测试。同时产品经理在想到面向客户的巨大压力的情况下,没有慌乱而责怪开发人员和具体操作人,而让大家能静下心来想解决方案。部门领导也积极主动的帮忙想办法,陪我们加班测试,实时跟踪事情进程。

通过大家的共同努力,终于事情相对圆满结束,接下来,周一上午进行集体反思,总结经验教训,这类事故一定尽量大努力进行避免。

工具链接:

1、ext3grep:

https://code.google.com/p/ext3grep

编译安装依赖包比较多,可以到网上搜索如何安装。可惜的是作者给出的howto被墙了,我翻墙将how to 的pdf文档下载下来了,读完后你将会对linux的文件系统有进一步的认识。下载howto。

这个工具有一个bug,出错后不会向下执行 ext3grep:init_directories.cc:534:voidinit_directories():Assertionlost_plus_found_directory_iter!=all_directories.end()' failed,从而造成恢复失败,作者放出了一个补丁。不明白为什么作者新版没有把这个补丁加进去。

下载地址:补丁下载

https://dwz.cn/f3uJ6m1x

2、extundelete:

http://extundelete.sourceforge.net

功能跟ext3grep差不多,原理应该也差不多。只是号称可以还原目录,我这里没有试验成功。

敬请关注「搜云库技术团队」微信公众号,获取最新文章

来源:www.cnblogs.com/zhouyu629/p/3734494.html

整编:搜云库技术团队,欢迎广大技术人员投稿

投稿邮箱:admin@souyunku.com

如果对本文的内容有疑问,请在文章留言区留言,谢谢。

》》》福利 + 程序员工作内推群《《《

更多技术干货

推荐:最新200篇:技术文章整理

1、3年半经验,3面鹅厂,被虐的体无完肤.... 
2、收到大厂面试邀请,这样准备能提升跳槽成功率 
3、RocketMQ 实现分布式事务,达到数据最终一致性 
4、为什么公司项目要前后端分离?有什么优缺点 
5、教你分析9种 OOM 常见原因及解决方案 
6、互联网秒杀系统,架构分析与实战,建议收藏 
7、Spring Boot 最流行的 16 条最佳实践 
8、阿里程序员推荐的15 款常用开发者工具 
9、某大厂 MySQL高性能优化规范建议,建议收藏

妹子在生产服务器执行了 rm -rf /*,还好有我帮她恢复了相关推荐

  1. Mac执行sudo rm -rf/*命令重启进不了系统

    当你在终端执行sudo rm  -rf/*这个命令后,发现所有的东西都被删除了,重启电脑显示苹果图标和进度一闪一闪.别慌!先关机,按一下电源键松开再长按电源键直到出现驱动盘就很好解决了. 如果这时候出 ...

  2. 不小心执行了 rm -rf /* 怎么办?

    点击上方蓝色字体,选择"置顶公众号" 优质文章,第一时间送达 作者 | 老周 链接 | cnblogs.com/zhouyu629/p/3734494.html 经历了两天不懈努力 ...

  3. 比 rm -rf /* 还骚的 Linux 19 个装 B 的命令!

    作者:快乐的骚年 地址:www.cnblogs.com/sukai/archive/2013/06/08/3127031.html 1. sl 命令 你会看到一辆火车从屏幕右边开往左边-- 安装 $  ...

  4. [sudo rm -rf /bin/] Linux误删除/bin目录恢复

    问题描述: Linux误删除/bin目录恢复 sudo rm -rf /bin/ 解决方案: 1. 找另外一台机器查看/bin/ 有哪些工具,如下: 2. 发现基本的操作工具全被删除了,vi.cd.m ...

  5. 不小心执行了 rm -rf,除了跑路还有其他办法吗?

    作者:justmine http://www.cnblogs.com/justmine/p/10359186.html 前言  每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执 ...

  6. mac抹掉磁盘重装系统未能与服务器取得联系_【工具】mac笔记本rm -rf 后 如何恢复删除的文件...

    本来是要cp -rf 到另一个地方的,然后用git管理起来的. 当时不知道怎么了,可能是最近加班多了直接执行了rm -rf . 这种一般是可以恢复的就是要来回折腾,不过也没办法只有折腾了,写了几天的内 ...

  7. linux rm 文件找回_linux下执行rm -rf命令后如何恢复

    果真感觉蛋疼了,欲哭无泪啊!写了一天的成果,想着把之前备份的文件删除呢,结果把刚写完的删了. 国外著名linx管理员守则中有这么一条:"慎用rm -rf命令,除非你知道此命令将带来什么后果. ...

  8. 误操作rm -rf /*之后该如何挽救,除了跑路还能怎么办

    一.前言 误执行了rm -rf /*  之后,除了跑路还能怎么办?其实像rm这样的敏感指定在生产环境中都是禁用的,如果某天,不小心执行了有什么方法可以挽救吗?答案是有的 二.初探案发现场 如果你的代码 ...

  9. 有个程序猿很忧桑:一个命令rm -rf/ ,他把整个公司删没了

    首先:欢迎各位学习java和大数据的程序员朋友们加入Java交流学习群: 721506929群里提供免费的架构学习资料,直播讲解,讲师都是有着十几年阿里java开发经验的大牛,欢迎各位前来围观学习. ...

最新文章

  1. http2.0的时代来了
  2. [linux] Linux日志设置(转自抚琴煮酒)
  3. 安卓菜单选项 Popup_Menu / Context_Menu / Option_Menu
  4. 只用了2个周末,15岁中国学生斩获苹果WWDC奖学金
  5. Java黑皮书课后题第2章:2.6(求一个整数各位数的和)读取一个0和1000之间的整数,并将给整数的各位数字相加
  6. Spring AOP自动创建代理 和 ProxyFactoryBean创建代理
  7. hana 查看表字段_hana 查看表数据库
  8. 内核中的UDP socket流程(7)——udp_sendmsg
  9. Android - Earthquake工程(地震监测) 的 对
  10. Java中SimpleDateFormat用法详解
  11. App测试如何进行?手机app测试要点
  12. python官网下载非常慢解决方法
  13. 期末排名算不算计算机成绩,智学网怎么看年级排名 智学网如何查看期末考试成绩...
  14. 《Spring Boot极简教程》第1章 Spring Boot史前简述
  15. 软件测试英语单词词汇
  16. Centos7:网络设置+搜狗输入法安装
  17. 「Vue系列」欢迎传送到“Teleport”星球
  18. 商务团队建设PPT模板
  19. 基于ALIENTEK MINISTM32开发板 ADC+DMA 8通道显示
  20. 安装软件时出现不能打开要写入的文件怎么解决?

热门文章

  1. 面试准备--7.31
  2. httpd.2.4虚拟主机配置测试
  3. java内存模型-JMM
  4. 深入理解Oracle RAC 12c 笔记
  5. [转载]python optionparser1
  6. Nagios 安装文档
  7. Delphi中使用IXMLHTTPRequest如何用POST方式提交带参
  8. BFD与IGP快速收敛应用测试
  9. cisco PIX防火墙的配置及注解完全手册
  10. k3应付系统初始化应付票据_在家工作时应付无尽干扰的真实感觉