一次心惊肉跳的服务器误删文件的恢复过程

2023-05-16

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

事故背景

安排一个妹子在一台生产服务器上安装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
do
    echo "begin to restore file " $LINE
    ext3grep /dev/vgdata/LogVol00 --restore-file $LINE
    if [ $? != 0 ]
    then
        echo "restore failed, exit"
       # exit 1
    fi
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,数据回来了!!!!!!!!!!!!!!!

后记

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

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

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

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

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

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

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

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

/**************************************传送门************************************************/

本文所用到的工具链接:

1.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.,从而造成恢复失败,作者放出了一个补丁,下载地址:补丁下载。不明白为什么作者新版没有把这个补丁加进去。

2.extundelete:http://extundelete.sourceforge.net/

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

http://www.techug.com/a-misdelete-story

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一次心惊肉跳的服务器误删文件的恢复过程 的相关文章

  • ubuntu mysql密码忘记了怎么办,ubuntu怎么查看mysql密码

    1 首先输入以下指令 xff1a sudo cat etc mysql debian cnf 运行截图如下 xff1a 2 再输入以下指令 xff1a mysql u debian sys maint p 注意 这条指令的密码输入是输入第一
  • Android中调用Ping操作及结果分析

    实现方法 android中调用ping命令需要使用Linux底层的命令 xff1a ping c 1 w 10 ip 其中参数 c 1指的是ping的次数为1 xff0c 参数 w 10指的是超时时间 xff0c 单位为秒 xff0c 超过
  • weblogic12c下载及安装

    下载地址 http www oracle com technetwork middleware weblogic downloads index html 安装步骤 xff1a 1 Extract the contents of the z
  • 休眠后电脑马上自动唤醒解决

    1 显示可唤醒的设备 powercfg devicequery wake programmable 2 显示已经设置为可以唤醒的设备 powercfg devicequery wake armed 3 休眠一下 xff0c 然后运行命令 x
  • Gradle之Wrapper详解

    转自 xff1a Gradle之Wrapper详解 简书 介绍 Wrapper xff0c 看到这个单词大家应该都不陌生 xff0c 它就是位于Android项目根目录下的gradle文件夹中的gradle wrapper properti
  • Spring管理Bean的三种方式

    随时随地阅读更多技术实战干货 xff0c 获取项目源码 学习资料 xff0c 请关注源代码社区公众号 ydmsq666 主要有三种方式 xff1a BeanWrapper BeanFactory和使用ApplicationContext 1
  • android中重写onConfigurationChanged方法响应系统设置更改

    随时随地阅读更多技术实战干货 xff0c 获取项目源码 学习资料 xff0c 请关注源代码社区公众号 ydmsq666 本文中利用按钮动态改变屏幕方向 xff0c 然后重写Activity的onConfigurationChanged方法
  • 执行Scala命令行工具

    1 2 2 执行Scala命令行工具 如果你单独安装了Scala 命令行工具 xff0c 会发现与Java 编译器javac 相似 xff0c Scala 编译器叫作scalac 我们会使用SBT 执行编译工作 xff0c 而不会直接使用s
  • 【Ubuntu】解决ubuntu系统root用户下Chrome无法启动问题

    1 问题描述 ubuntu系统在root用户下无法启动Chrome xff0c 报错 xff1a Running as root without no sandbox is not supported See https crbug com
  • 【ubuntu】在ubuntu下无法输出拼音输入法中的中括号“【” 和 “】”的解决方法

    问题 在新装的ubuntu16 04中 xff0c 打不出中括号 xff0c 而变成 和 解决方法 修改文件 usr share fcitx data punc mb zh CN sudo vi usr share fcitx data p
  • 关于Keil如何设置只编译修改过的文件

    以前用的都是51单片机程序小 xff0c 点击和点击时间都差不多 xff0c 可是最近在用stm32的官方库 xff0c 这是点击全部编译就要浪费大量的时间 xff0c 实际上点击原本只会编译修改过的文件其实现的原理和makefile差不多
  • 2014年年终总结:写书成长,承载收获

    雪花纷飞 xff0c 任你飘落凝成魅力的雪域之城 美丽的守候 xff0c 望长城内外惟余莽莽 数着北国春夏秋冬的每一天 xff0c 2014 的日历天天换新装 xff0c 消瘦了你的时光 但丰盈了我的渴望 2014 年 xff0c 在你的身
  • Protobuf在Android中的基本使用

    前言 Protobuf xff0c 类似于json和xml xff0c 是一种序列化结构数据机制 xff0c 可以用于数据通讯等场景 xff0c 相对于xml而言更小 xff0c 相对于json而言解析更快 xff0c 支持多语言 一 Pr
  • CentOS 使用virsh创建虚拟机

    一 参考 xff1a 1 CentOS 7 6使用virsh创建虚拟机 2 先输入 xff1a yum search qemu kvm 查看是否有qemu kvm可以安装 接着输入 xff1a yum search libvirt 查看是否
  • linux离线搭建SVN服务器系列<二 >

    在linux离线搭建SVN服务器系列 lt 一 gt 里安装svn服务器后 xff0c 接下来就是安装svn客户端了 这里打算以windows客户端和linux为例进行说明 一 linux svn客户端 一 先安装linux svn客户端
  • NDK配置debug环境时:Error:FAILURE: Build failed with an exception

    Error FAILURE Build failed with an exception What went wrong Execution failed for task 39 app externalNativeBuildDebug 3
  • Android 集成OpenCV

    OpenCV下载 一 集成SDK 1 从官网下载最新的android sdk xff0c 这里下载的是4 5 4 2 创建Android项目 xff0c 将sdk以library方式引入项目中 sdk使用了kotlin xff0c 需要配置
  • MyEclipse 控制台等显示在底部

    虽然接触MyEclipse已经有了几年了 xff0c 但是底部的控制台 xff0c 服务 xff0c svn等等显示不清楚 今天百度了 xff0c 发现只要按 Window gt show view gt 选择你要固定在底部的选项 还真方便
  • 协方差与自相关

    协方差矩阵是一个矩阵 xff0c 其每个元素是各个向量元素之间的协方差 这是从标量随机变量 到高维度随机向量 的自然推广 假设是以个标量随机变量组成的列向量 xff0c 并且是其第i个元素的期望值 xff0c 即 协方差矩阵被定义的第i x

随机推荐

  • 基础解系

    基础解系首先是线性无关的 xff0c 简单的理解就是能够用它的线性组合表示出该 方程组的任意一组解 xff0c 基础解系是针对有无数多组解的方程而言 xff0c 若是齐次线性方程组则应是有效方程组的个数少于未知数的个数 xff0c 若非齐次
  • 机器学习实践指南:案例应用解析(第二版)

    试读及购买链接 机器学习实践指南2版代码及资源 原书中的360网盘链接因为360关闭网盘的原因已经失效 1 https pan baidu com s 1nw37A5N 2 http www hzbook com Books 9324 ht
  • 数学之路-python计算实战(7)-机器视觉-图像产生加性零均值高斯噪声

    图像产生加性零均值高斯噪声 xff0c 在灰度图上加上噪声 xff0c 加上噪声的方式是每个点的灰度值加上一个噪声值 xff0c 噪声值的产生方式为Box Muller算法 生成高斯噪声 在计算机模拟中 xff0c 经常需要生成正态分布的数
  • 数学之路-python计算实战(16)-机器视觉-滤波去噪(邻域平均法滤波)

    coding utf 8 code myhaspl 64 myhaspl com 邻域平均法滤波 半径为2 import cv2 import numpy as np fn 61 34 test3 jpg 34 myimg 61 cv2 i
  • Serializable和Parcelable序列化

    前言 Android中常用的序列化方式包含有两种 xff1a Serializable和Parcelable 其中Serializable是java中通用的对象序列化方法 xff0c 在Android实际内存操作时会更加偏向于实现Parce
  • R语言与数据模型(1)-平均,方差,中位数,分位数,极差

    1 求平均数 gt x lt c 1 10 20 30 40 50 NA 60 gt xm lt mean x gt xm 1 NA na rm表示允许缺失数据NA gt xm lt mean x na rm 61 TRUE gt xm 1
  • AI理论随笔-对称矩阵、正交矩阵与特征向量,特征值(2)

    一 如果 xff1a A A T 61 E AA T 61 E A A T 61 E
  • 英文过滤停用词

    span class token triple quoted string string 34 34 34 Created on Sun Nov 13 09 14 13 2016 64 author daxiong 34 34 34 spa
  • C语言随笔-去掉仅有\n的行

    include lt stdio h gt int main int argc const char argv char str 128 char linep strcpy str 34 12 35 56 n12 33 87 n n n n
  • python3.6-深入浅出视频

    课程收益 适合人群 python小白 xff0c 大数据和机器学习编程程序员 上机实践为主线 以最快的速度上手 快速入门 xff0c 还学到了python3的核心知识 https edu csdn net course detail 989
  • 数学之路(3)-机器学习(3)-机器学习算法-神经网络[11]

    多层感知器的代码 xff0c 需要一个比较复杂的调试过程 xff0c 不过也有一些方法来加快这一速度 xff0c 其中有几个地方要注意 xff1a 1 输入层 输出层 中间层的学习率和动量参数不能一样 xff0c 2 3个层的权值策略不能一
  • 14、iOS里面的富文本

    iOS里面的富文本 1 NSAttributedString属性概览表2 属性详解及应用2 1 NSAttributedString Key font 字体大小2 2 NSAttributedString Key paragraphStyl
  • 马化腾五兄弟:难得的创业团队

    http www donews com people 201105 455471 shtm 腾讯的马化腾创业5兄弟 xff0c 堪称难得 xff0c 其理性堪称标本 12年前的那个秋天 xff0c 马化腾与他的同学张志东 合资 注册了深圳腾
  • 选择创业团队的类型

    从不同的角度 层次和结构 xff0c 可以划分为不同类型的创业团队 xff0c 而依据创业团队的组成者来划分 xff0c 创业团队有星状创业团队 xff08 Star Team xff09 网状创业团队 xff08 Net Team xff
  • MQTT3.1与UDP时效性分析

    前言 MQTT 3 1协议在弱网络环境下 xff08 比如2G 3G等 xff09 表现不够好 xff0c 因此才有了反思 弱网环境下表现 手机等终端在弱网络环境下丢包情况会非常明显 xff0c 连接MQTT Server成功率很低 相比单
  • Android APP开机自启动基本方法

    前言 应用自启动主要是通过接收系统广播BOOT COMPLETED来实现的 xff0c 在receiver中执行APP启动的方法 实现 主要分为两个部分 xff1a AndroidManifest xml配置 xff0c 包括权限配置和广播
  • gitlab markdown 支持TOC解决办法

    问题分析 1 标题的锚点会被替换 中文替换为 39 39 空格等非正常字符替换为 39 39 这给自己手动写toc也带来了麻烦 不能直接复制标题作为链接 2 不能自动生成TOC 目前gitlab不支持TOC功能 解决方法 1 解决中文问题
  • 数据科学家能力发展路线图

  • 每秒处理10万订单乐视集团支付架构

    随着乐视硬件抢购的不断升级 xff0c 乐视集团支付面临的请求压力百倍乃至千倍的暴增 作为商品购买的最后一环 xff0c 保证用户快速稳定的完成支付尤为重要 所以在15年11月 xff0c 我们对整个支付系统进行了全面的架构升级 xff0c
  • 一次心惊肉跳的服务器误删文件的恢复过程

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