问题点
早上起来打开项目,突然发现数据库怎么都连不上,重启数据转圈半天没有反映,心急直接reboot服务器,重启服务器后mysql -u root -p发现启动文件都没有了,现象跟已经用rpm包装了一个数据库,然后又在宝塔重装一个的现象类似。
百度资料
通过百度相关资料,发现网上比较常用的方法有两种:
- extundelete恢复删除文件;
- 通过数据库本身的ibd、frm文件进行恢复;
但以上两种方式操作起来都不太简单,经过反复查阅资料后决定把var/lib/mysql目录下的ibd、frm等文件做个备份,然后通过缺什么补什么的原理来尝试恢复。
这里说一下,我本来是准备做个实例快照,无奈阿里云收费,最后只能司马当活马医,自己动手弄。
修复过程
查询已安装数据库(mysql),看看是否是覆盖安装,如果是直接删掉最新安装的版本。
rpm -qa | grep mysql
删除密令(mysql 是查询出来的mysql 版本)
rpm -e --nodeps mysql
检查原来的mysql版本还差什么内容,哪些文件被误删了,配置环境是否还在是否需要更改等。为了方便做比较,我用另外一台服务器也装了一个数据库,本来想装一个一样的版本,但习惯用rpm包安装,发现虽然都是5.6,但是后缀还是不一样,不过没关系。
装完查一下mysql相关目录,对比是否有被删文件和目录。
find / name mysql
看/etc/my.cnf文件是否还在并查看是否有改变,有就改回来。
vi /etc/my.cnf
通过比较发现我这个主要缺少启动文件、my.cnf和/usr/bin/下面相关的mysql文件和目录。直接把主要的启动文件、my.cnf直接从另外一台服务器复制过来(记得缺权限就给权限),然后尝试启动和查看状态,会发现报很多错,到这里我也不记得操作了多少东西了,总之缺什么补什么,报什么错误就解决什么错。
以下是几个是我当时的操作截图:
通过查看状态和尝试启动来看看缺少哪些文件,从另外服务器上复制过来,反复该步骤。
最后发现既然可以登录进去了,查看状态虽然提示有点不正常,赶紧登录进去看看数据还在不在。
结局是万幸的,数据没有丢失,一次性把所有数据都拷贝出来,重装一下mysql,然后再一一把数据导入进去。
THE END
感谢查阅,我知道我的操作流程99%对你来说是不能解决问题,重要要是处理的逻辑,因为网上说的其他方法,操作起来时间上一定不会比我这个少。特别是ibd和frm文件一个表一个表的恢复,类似我这种所有开发数据都放在里面,有几十个库的人来说肯定是不划算的。这里提一下,我用了一早上进行恢复。
参考资料:
https://www.centoschina.cn/course/intermediate/9531.html
玉念聿辉:编辑