误删 mysql数据库文件,别急,试试这个方法
前一段时间,公司部门使用禅道维护项目信息,使用的是免费版的,让我负责维护。那天也忘了是啥原因了,就看服务器上有一个文件夹感觉没啥用,就rm -rf 彻底给删除了。删除以后突然想起这可能是禅道的数据文件,确实如此。当时那个悔恨啊,真想扇自己几巴掌,但是没办法已经删除了,想办法恢复吧。跟领导汇报了一下,领导说应该有备份,顿时感觉有希望了。但是很快发现备份的数据恢复不出来。这是悲哀中的悲哀啊。无奈只能自己试着恢复了。毕竟也不是专业做这个的呀,从网上搜了下,有好多收费给恢复的。但是涉及到公司项目信息不能泄露,也不能找外援了。只能自己找方法了。
这个是分两个步骤,第一是要恢复数据文件,第二是恢复mysql数据。
1、恢复数据文件:
我从网上找到了一个开源的工具 TestDisk。这个软件确实很牛。软件地址https://www.cgsecurity.org/wiki/TestDisk_Download 操作指南https://www.cgsecurity.org/wiki/Testdisk_%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97#.E8.BF.90.E8.A1.8C_TestDisk_.E7.A8.8B.E5.BA.8F;按照说明步骤,我看到了自己删除的文件,真是太惊喜了。
其中一部分文件没有恢复,万幸的是Mysql的data目录下面的数据还存在,数据库是不完整了,只能将数据弄到本地进行数据抢修;
2、恢复数据:
禅道开源用的是mysql5版本,我在本机安装了5版本,开始安装上数据库后,创建相同名称的数据库,将数据文件放进去,数据没有恢复过来。后来发现数据库的存储格式不正确,禅道用的是MyISAM格式进行存储的。其中有三个文件:
-
.frm 表示数据表结构,可以理解为Create Table
-
.MYD 表示数据表的实际数据内容,就是记录集,My data的缩写估计。
-
.MYI 表示数据表的索引结构,在Navicat下可以看到每个表都是自己的索引,这个就是存它用的。
这三个文件不能完全覆盖,需要先建一个数据库名称和源数据库名称一致,找来源程序的建表语句(万幸是开源的,有建表语句),然后把每个表的.MYD ,.MYI文件覆盖,然后flush tables(需要执行一次 flush tables; 才会生效,因为该数据表的文件句柄已经打开了,所以需要刷新一下
); 简直是欣喜若狂,数据找回来了。
至此,一次惊心动魄的数据删除,又恢复的过程完成了,记录下来,也许对你有用。