从删库到跑路or恢复,记一次MySQL数据库文件损坏恢复经历数据库

来源:互联网 / 作者:SKY / 2018-06-26 18:04 / 点击:
这是工作7年来出的最大一次事故,去年给自己定的一个目标今年写12篇有质量的文章反馈给互联网,都快过半年了一篇还没有写,没想到第一篇竟然是以这种方式书写的

技术沙龙 | 6月30日与多位专家探讨技术高速发展下如何应对运维新挑战!

从删库到跑路or恢复,记一次MySQL数据库文件损坏恢复经历

一、 前言

2018年5月28日,北京晴有轻度沙尘暴。 坐上公交车走在上班的路上,想起老罗经常说起的一句话:想成盛田昭夫A5的索尼,想成乔布斯A5的苹果,于是继续研读着 《日本制造:盛田昭夫的日式经营学》。

到了人大西门在西区食堂吃了个早餐,穿过人民大学很快就来到了公司。坐在工位上打开电脑登上QQ,不一会运营的CC的头像就开始闪动,“mooc平台登录不了”,“你看看”。又一会领导的头像开始闪动,“xxx说慕课平台不能登录了”。 额… 这事都惊动领导了?

二、 排查问题

打开chrome浏览器开始预览,等了好久代理服务器才反馈

Time out! 

使用 SecureCRT 连接了一下服务器,首先重新启动了一下Nginx代理服务器

service nignx stop // 关闭Nginx服务  

service nginx start // 开启Nginx服务 

从删库到跑路or恢复,记一次MySQL数据库文件损坏恢复经历

去前台刷新了几下没有恢复。 那就在重启一下php吧,于是就

service php-fpm stop // 关闭PHP服务  

service php-fpm start // 开启PHP服务 

从删库到跑路or恢复,记一次MySQL数据库文件损坏恢复经历

又去前台试了试还是没有恢复。(有人会问为什么不直接用 service xxx restart 来重启各服务呢? 我也不知道为什么,个人爱好吧!)那只有一种可能数据库出问题了。

打开 Navicat 连接了一下数据库,发现可以正常连接而且可以看到所有的表,随便打开了一张表能看到里面的数据,但是弹出了一个错误的提示。

Got error 28 from storage engine 

大概是这个错误提示,当时也没在意,心想反正提示错误了那就重启一下物理服务器吧,这里是物理服务器!!!随后执行了这个命令(为什么不直接重启MySQL服务呢? 事后想了想我也不知道为什么。 而且如果当时注意看看这个错误,是因为磁盘空间问题引起的,也许后面就不会有那么多惊心动魄了!)

reboot // 重启物理服务器 

执行完以后所有的服务都正常关闭了,只有Mysql数据库服务

Shutdown MySQL ………………………………………………. 

引号已经5排了,实在是等不下去了。 断电!!!(MySQL没有安全关闭,直接断电会出问题的!!!)。

三、 恢复进程

等了一会,物理服务器启动起来了。一切的应用服务都正常启动了,只看到在启动MySQL数据库的时候出现了

The server quit without updating pid file (/var/lib/mysql/localhost.localdomain.pid) 

等到全部服务加载完成以后手动又进行了一次MySQL数据库启动

service mysql start 

从删库到跑路or恢复,记一次MySQL数据库文件损坏恢复经历

依然报前面那样的错误,此时心里开始紧张了起来。 Google了一下这个错误,网上提供了几种解决的方案:

1、 Mysql权限问题

chown -R mysql:mysql /var/lib/mysql/*  

chmod -R 660 /var/lib/mysql/* 

从删库到跑路or恢复,记一次MySQL数据库文件损坏恢复经历

2、 Mysql 服务已开启

ps -ef|grep mysqld // 查看是否有mysqld进程  

kill -9 进程号 // 强制杀死进程 

3、 残余数据影响了Mysql服务的启动

删除数据库目录(我的数据库目录为rpm安装默认目录:/var/lib/mysql)下的 mysql-bin.index 文件

4、 Mysql配置文件(默认为:/etc/my.cnf)

配置文件里面没有配置数据库目录,这个问题一般在刚安装MySQL时候会出现

5、 skip-federated字段问题

MySQL配置文件注释掉skip-federated字段

6、 selinux的问题

centos6.8以上默认会开启selinux服务,加强版军用级防火墙。为了查问题可以直接关掉

/usr/sbin/setenforce 0 

以上解决方案全部都已经使用过了,都没有解决问题,依然开启服务会报错。 此时的心开始凉了。

回头看了看往期的备份,xxxx_20171208.sql。 都快2018年6月份了,我的上次备份竟然是17年12月份的,半年了!都半年没备份过了! (我视乎隐约的感觉前段时间是有备份的,备份的服务器硬盘好像被我清理了)。

进入到数据库目录下,看到了除了上述说的 mysql-bin.index 文件以外还有其他的几个文件:mysql-bin.~rec~ 、 ib_logfile1、 ib_logfile0、 ibdata1 想了想是不是这几个也是一些残余文件,全部删了试试。 尝试把这几个文件转移到了其他的目录(使用的mv命令)模拟删除效果,同时还相当于备份。

service mysql start 

阅读延展

1
3