linux-服务器误删文件的恢复过程
来源:http://t.cn/E99LnX9
事故背景
救命稻草 --ext3grep
灵机一动:binlog
后记
经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据。对本次事故过程和解决办法记录在此,警醒自己,也提示别人莫犯此错。也希望遇到问题的朋友能找到一丝灵感解决问题。
事故背景
安排一个妹子在一台生产服务器上安装 Oracle, 妹子边研究边安装, 感觉装的不对, 准备卸载重新安装。从网上找到卸载方法,其中要执行一行命令删除 Oracle 的安装目录,命令如下:
rm -rf $ORACLE_BASE/*
如果 ORACLE_BASE 这个变量没有赋值,那命令就变成了
rm -rf /*
等等,妹子使用的可是root账户啊。就这样,把整个盘的文件全部删除了。包括应用Tomcat、MySQL数据库 and so on。。。。
(mysql 数据库不是在运行吗? linux 能删除正在执行的文件? 反正是彻底删除了,最后还剩一个 tomcat 的 log 文件,估计是文件过大,一时没有删除成功)
看着妹子自责的眼神,又是因为这事是我安排她做的,也没有跟她讲清厉害关系,没有任何培训,责任只能一个人背了,况且怎么能让美女背负这个责任呢?
打电话到机房,将盘挂到另一台服务器上,ssh 上去查看文件全部被清,这台服务器运行的可是一个客户的生产系统啊,已经运行大半年了,得尽快恢复啊。
于是找来脱机备份的数据库,发现备份文件只有 1kb,里面只有几行熟悉的 mysqldump 注释(难道是 crontab 执行的备份脚本有问题),最接尽的备份也是 2013 年 12 月份的了,真是屋漏偏逢连夜雨啊。
想起来一位领导说过的案例:当一个生产系统挂掉以后,发现所有备份都有问题,刻录的光盘也有划痕,磁带机也坏了(一个业界前辈,估计以前还用光盘做备份了),没想到今天真的应验到我的身上了,怎么办??
部门领导知道情况后,已经做了最坏的 B 计划: 领导亲自带队和产品 AA 周日赶到客户所在的地市,星期一去领导层沟通;BB 和 CC 去客户管理员那边想办法说服客户。。。
救命稻草 --ext3grep
赶快到网上去查资料进行误删数据恢复,还真找到一款 ext3grep 能够恢复通过 rm -rf 删除的文件,我们磁盘也是 ext3 格式,且网上有不少的成功案例。
于是燃起了一丝希望,赶快对盘 umount,防止重新写入补删文件扇区。
下载 ext3grep,安装(编译安装过程艰辛暂且不表)。
先执行扫描文件名命令:
ext3grep /dev/vgdata/LogVol00 --dump-names
打印出了所有被删除文件及路径,心中狂喜,不用执行 B 计划了,文件都在呢。
这款软件不能按目录恢复文件,只能执行恢复全部命令:
ext3grep /dev/vgdata/LogVol00 --restore-all
结果当前盘空间不足,没办法只能恢复文件,尝试了几个文件,居然部分成功部分失败
ext3grep /dev/vgdata/LogVol00 --restore-file var/lib/mysql/aqsh/tb_b_attench.MYD
心里不禁一凉,难道是删除磁盘上被写过文件了? 恢复机率不大了啊,能恢复几个算几个吧,说不定重要数据文件刚好在能恢复的 MYD 文件中。
于是先将所有文件名重定向到一个文件文件中
ext3grep /dev/vgdata/LogVol00 --dump-names >/usr/allnames.txt
过滤出来所有 mysql 数据库的文件名存成, mysqltbname.txt
编写脚本恢复文件:
while read LINE
doecho "begin to restore file " $LINEext3grep /dev/vgdata/LogVol00 --restore-file $LINEif [ $? != 0 ]thenecho "restore failed, exit"# exit 1fi
done < ./mysqltbname.txt
执行,大概运行了 20 分钟,恢复了 40 多个文件,但不够啊,我们将近 100 张表,每张表 frm,myd,myi 三个文件,怎么说也有 300 多个左右啊!!
将找回来的文件附到现有数据库上,更要文件权限为 777 后,重启 mysql,也算是找回一部分数据了,但客户重要的考勤签到数据、手机端上报数据(据说客户按这些数据做员工绩效的)还没找回来啊。
咋 办? 中间又试了另一款工具 extundelete,跟 ext3grep 语法基本一致,原理应该也一样了,但是据说能按目录恢复,好吧试一试。
extundelete /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
ext3grep /dev/vgdata/LogVol00 --restore-file var/lib/mysql/mysql-bin.000001
居然失败了。。。。。。
再看另两个文件,mysql-bin.000010 大概几百 MB,应该靠谱一点,执行还原命令,居然成功了!!!!!!!!!!!!!
赶快 scp 到测试服务器。
执行 binlog 还原。
mysqlbinlog /usr/mysql-bin.000010 | mysql -uroot -p
输入密码,卡住了(好现象),经过漫长的等待,终于结束了。
打开应用,哦,感谢 cctv,mtv,数据回来了!!!!!!!!!!!!!!!
后记
经过此次事故,虽然数据很幸运能找回来了,但是过程却是惊心动迫。
也为自己的错误所带来的后果,给同事和领导带来的连带责任而后怕。
也希望谨记此次事故,以后不再犯同样的错误。
事故反思如下:
本次安排 MM 进行服务器维护时没有提前对她进行说明厉害情况,自己也未重视,管理混乱,流程混乱。一个在线的生产系统,任何一个改动一定要先谋而后动。
自动备份出现问题,没有任何人检查。脱机备份人员每次从服务器上下载 1k 的文件却从未重视。需要明确大家在工作岗位上的责任。
事故发生后,没有及时发现,造成部分数据写入磁盘,造成不可恢复问题。需要编写应用监控程序,服务一旦有异常,短信告警相关责任人。
根据评论提醒, 再加一条:
不能使用 root 用户来操作。应该在服务器上开设不同权限级别的用户。
通过本次事故,几位跟这个项目和事故没有任何关系的同事,主动前来帮忙,查资料,帮测试,有一位同事还帮忙到晚上 1 点多钟进行数据恢复测试。
同时产品经理在想到面向客户的巨大压力的情况下,没有慌乱而责怪开发人员和具体操作人,而让大家能静下心来想解决方案。
部门领导也积极主动的帮忙想办法,陪我们加班测试,实时跟踪事情进程。
通过大家的共同努力,终于事情相对圆满结束,接下来,周一上午进行集体反思,总结经验教训,这类事故一定尽量大努力进行避免。
———— e n d ————
本文所用到的工具链接:
- ext3grep:https://code.google.com/p/ext3grep/
编译安装依赖包比较多,可以到网上搜索如何安装。可惜的是作者给出的 howto 被墙了,我 FQ 将 how to 的 pdf 文档下载下来了,读完后你将会对 linux 的文件系统有进一步的认识。下载 howto。
这个工具有一个 bug,出错后不会向下执行 ext3grep: init_directories.cc:534: void init_directories(): Assertion `lost_plus_found_directory_iter != all_directories.end()’ failed.,从而造成恢复失败,作者放出了一个补丁,下载地址:补丁下载。不明白为什么作者新版没有把这个补丁加进去。
- extundelete:http://extundelete.sourceforge.net/
功能跟 ext3grep 差不多,原理应该也差不多。只是号称可以还原目录,我这里没有试验成功。
linux-服务器误删文件的恢复过程相关推荐
- 024-一次心惊肉跳的服务器误删文件的恢复过程
2019独角兽企业重金招聘Python工程师标准>>> 一次心惊肉跳的服务器误删文件的恢复过程 来源:zhouyu 链接:www.cnblogs.com/zhouyu629/p/37 ...
- 一次心惊肉跳的服务器误删文件的恢复过程
经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据.对本次事故过程和解决办法记录在此,警醒自己,也提示别人莫犯此错.也希望遇到问题的朋友能找到一丝灵感解决问题. 事故背景 安排一个妹子在一台 ...
- 很慌!一次惊心动魄的服务器误删文件的恢复过程
来源: https://dwz.cn/xZFW4J8S 经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据.对本次事故过程和解决办法记录在此,警醒自己,也提示别人莫犯此错.也希望遇到问题的朋 ...
- 转载——服务器误删文件的恢复过程
经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据.对本次事故过程和解决办法记录在此,警醒自己,也提示别人莫犯此错.也希望遇到问题的朋友能找到一丝灵感解决问题. 事故背景 安排一个妹子在一台 ...
- MySQL/oracle服务器误删文件的恢复过程
经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据.对本次事故过程和解决办法记录在此,警醒自己,也提示别人莫犯此错.也希望遇到问题的朋友能找到一丝灵感解决问题. 事故背景 安排一个妹子在一台 ...
- 服务器误删文件的恢复过程
原文:https://www.cnblogs.com/zhouyu629/p/3734494.html 经历了两天不懈努力,终于恢复了一次误操作删除的生产服务器数据.对本次事故过程和解决办法记录在此, ...
- Linux中误删文件的恢复方法
Linux中误删文件的恢复方法 做为Linux的从业者大家对"rm -rf"这个命令肯定又爱又恨. 他的简洁霸气,势不可挡,可谓"十步杀一人,千里不留行", 他 ...
- linux文件被覆盖如何恢复_在Linux下误删文件后恢复
1.给虚拟主机添加一块磁盘,磁盘为/dev/sdb,如下: 2.格式化磁盘,并进行挂载 # mkfs.ext4 /dev/sdb # mkdir /usr/local/dbdata/ # mount ...
- 记一次Linux服务器 误删数据的恢复操作
今天把自己的一个服务器的数据 误操作删除了一个重要的数据表,心想,嗯,真特么的想扇自己个耳光,哈哈哈 好,事不宜迟,进入正文 事情是这样的.我执行了TRUNCATE操作,导致表清空了,那么静下心来想 ...
最新文章
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色自定义配置)实战
- 从入门到精(fang)通(qi)第5期 我们的征途是星辰大海
- 云服务优缺点_什么是云服务器,云服务器的优缺点
- Apache服务器 配置多个网站解决方案
- 一步一步学Silverlight 2系列(4):鼠标事件处理
- 综合中央计算机系统简称,全国计算机等级考试级试题及答案.doc
- php数据处理工具,数据处理的PHP类
- access字体变为斜体_Linux折腾记(四):Linux桌面系统字体配置详解
- 安卓USB开发教程 六 安卓 AOA 2.0
- Git(7)-Git commit
- 对static静态成员的理解
- Linux下后台执行java程序
- Python中变量判断
- 老年人学摄影,装备该如何选择?
- 读软件工程前三章后感
- 608. 两数和-输入已排序的数组
- S7-1500 CPU、显示器、ET 200SP CPU 和 ET 200pro CPU 的固件更新方法
- Java是什么?Java能干什么工作?
- 一名【合格】前端工程师的自检清单
- 微信群发消息的三种操作,原来多群群发消息可以这样做
热门文章
- [Codewar训练]Longest Common Subsequence(Performance version)(最长子序)
- 用一元五角兑换5分、2分、1分的硬币(每种都要有)共100枚,共一共有多少种方案?
- 程序员一定要精通英语吗?程序员常用英语词汇汇总!
- 智能推荐助力南瓜电影打造私人定制影院
- 安卓虚拟机_一个手机变两个!安卓机上的安卓虚拟机,自带Xposed框架!
- windows动态链接库dll生成和使用
- php 将CST时间转成格式化时间
- 人工智能技术在高级威胁检测中的应用实践 | T·Talk
- ssm医院挂号系统的设计与实现 毕业设计-附源码211633
- 统计知识基础(二)点估计、区间估计、大数定律及中心极限定理