记一次mysql数据误删后的挽救之路

故事的背景:

某日某夜某时某刻某程序员百无聊赖,想着前几天升级服务器后还有一些问题没解决,于是打开了电脑,连上了服务器,开始了一番倒腾,在一阵噼里啪啦键盘敲击之后,突然发现了一个很严重的问题,mysql数据库服务没起来,故事就开始了。

当发现mysql没起来的时候,第一反应是要看一下出了什么错,于是敲了命令:

service mysql status

截图当时没保存,总之是一个以前没见过的报错,大致意思就是说mysql主进程异常退出,也没有说是什么原因,好吧不知道原因,先来重启一波,于是接着敲了命令:

service mysql restart

mysql还是没有按照预想的起来,好吧,换种方式再试试重启

service mysql stop
service mysql start

在运行了上面的命令之后错误依旧,看来不解决掉出错问题mysql是起不来了,于是复制了报错内容去百度Google搜索了一波,大部分是说是因为ubuntu14升级到16引起的,前几天确实做了这个操作,当时只检查了网站能不能访问并没有检查mysql的运行情况,再加上网站有缓存,可能就漏掉了,还有一种可能就是在升级系统之后我将php升级到了7.3版本,然后5.6版本的php还保留在,然后手贱运行了

apt-get autoremmove php5-fpm

可能删除了什么mysql-server依赖的东西,当然问题发生了就得解决,当时几乎试遍了百度google所有能搜到的方法,都不能解决这个错误,mysql还是起不来,有点沮丧了,后来看到一篇文章说是要彻底清除mysql-server的痕迹,然后重装才能彻底解决这个问题,因为之前也有尝试重装过,安装过程都有报错以失败告终,当时看到这篇文章也不疑有他,直接按照上面的步骤,依次运行了下面的命令:

rm -rf /var/lib/mysql
rm -rf /var/etc/mysql
apt-get autoremove mysql*
apt-get install mysql-server

整个过程很顺利,再也没有出现报错,但我心中开始担心了,安装完成后敲了命令:

service mysql start

不一会儿,mysql起来了,赶快登录进去看了一眼现有的数据库,我担心的事情终于还是发生了,原来10几个数据库现在只剩下4个mysql内置的数据库,以前的数据全没了,关键数据库都没备份,3年多的心血呀,付之一炬,当时心里真是万马奔腾,想死的心都有了,虽然之前也有想过备份数据库,但是mysql当时起不来,所以没办法备份,也不知道其他的备份方式,其实当我敲完

rm -rf /var/lib/mysql
rm -rf /var/etc/mysql

这两行命令之后,我就感觉到问题发生了,当时还是抱着一丝侥幸,结果却印证了心中的猜想,数据没了,虽然当时心里很不平静,但是还是努力让自己平静找解决办法,于是又开始了另一波百度和google的搜索,果不其然,结果发现mysql所有的数据库的内容都保存在/var/lib/mysql目录下面,但是这个目录却被我删了,既然删了那就想办法恢复,于是找到了工具extundelete工具,按照使用方式恢复了近2天删除的文件,不过遗憾的是没有恢复我想要的文件,这时心更凉了,感觉进行不下去了。

趴着床上想了一会儿之后登录了阿里云提交了工单,工单主要描述了事情的始末并询问能不能恢复数据,不一会儿阿里云客服打电话过来了,问了我事情发生的时间和原因,然后让我授权让他们先分析一下,附带给我说了一句这种事情他们很难帮上忙,数据多半是恢复不了了,不过我还是抱着一丝丝的希望。

又过了一会儿,阿里云客服有打电话来了,说是经过分析是由于我误操作引起的,数据多半是找不到了,不过可以尝试帮我做一次扫描,但是希望很小,于是我按照他们的指导做了磁盘镜像,让他们帮我做了扫描。

大概几十分钟后,我在工单中看到客服回复说深度扫描也没有找到误删的数据库文件,还有吧啦吧啦一堆内容,总之结果就是数据恢复不了了,好吧,心彻底凉了。

当时真的很受伤,躺在床上看着天花板,心想难道3年多的心血就真的这样没了吗?不行,我接受不了,于是做了最后一次尝试,首先我意识到网站可能有很长一段时间不能正常访问,为了不影响之前收录的文章我到百度站长下面申请了闭站保护

然后进入了之前预留的数据库备份目录,惊喜的发现还有几个数据库的备份,其中有一个备份是博客的数据,是4月份备份的,虽然还差了3个月的数据,但是总归保住了一大部分,于是做了恢复,数据成功恢复,但是文章却又回到了3个月前的样子。

接着我用百度搜索了从3月份至今索引的所有文章,

找出了缺失的那部分文章的url,然后根据自己的记忆重写了一部分文章的内容,算是恢复了这部分文章,但是这3个月怎么的也有几十篇文章,每篇文章都重写实在是太痛苦了,怎么办呢?

一个偶然让我想起百度还有一个快照功能,快照里面会不会包含以前文章的内容呢?

立立马点了百度快照,

当快照打开的那一刹那,心里那个激动呀,页面样式虽然乱了,但是里面却包含了以前文章的所有内容,这样就简单了,剩下的工作只需要一个个点开丢失的文章的百度快照,将内容复制回来,按照发布的时间和以前定好的url重新添加一次就好了,过了差不多一个小时就恢复了博客所有的文章,一篇都没有落下。提示:这里如果发现百度没有索引我们的某篇文章还可以尝试google,360,搜狗等搜索引擎。

当然这种恢复方式对于完全没数据库备份,搜索引擎没有索引的网页是没有意义的,但是满足一个条件就可以尽量止损,完全恢复也不是没有可能。

从这个事情我总结出一下几点:

1、也是重中之重,数据一定要备份,每天都要,甚至每一分钟都要。

2、在敲命令之前一定要想好这个命令可能带来的问题,不要脑子一发热,enter键就按下去了,有风险的命令一定要运行做好各种备份,或者快照。

3、多学多看,只有我们知道的够多,才能更好的预测我们做的每一步的风险,提前防患于未然。

后续:

1、申请关闭闭站保护,毕竟我们的数据都恢复了,而且已经可以正常访问了。

2、恢复数据,重新缺失的网站内容。

3、写了shell脚本,每天定时备份所有的数据库。

  • 支付宝二维码 支付宝
  • 微信二维码 微信
相关文章