本地服务器突然断电,结果系统起不来了。很悲剧。因为本地内网装了禅道,项目不重要,重要的是数据记录,所以就得把数据给恢复了,当时比较懒,也没有做定期的备份,现在手上只有mysql的数据存储文件(.frm和.ibd文件),在mysql里,通过命令show variables like 'datadir';查出来的地址
从frm文件中恢复表结构
1.先备份之前数据的.frm 和.ibd文件,并创建与之前名称相同的数据库
show variables like 'datadir'; //查看data路径
create database hospital;2.进入数据库,并创建名称相同的表,由于不知道表结构,先创建1列
use hospital;
create table info (id int);3.替换文件
将以前的info.frm文件替换现路径下的info.frm文件
4.重启mysql服务器
5.查看表结构
 desc info ;6.查看错误
show variables like 'log_%'; # 找到log_error文件 显示info原表有8列
显示info原表有8列
7.删除表info,并创建8列表结构
drop table info;
create table info (id int,id2 int,id3 int,id4 int,id5 int,id6 int,id7 int,id8 int);
 8.重新拷贝,用备份test.frm文件代替mysql data目录下的test.frm文件
9.修改mysql配置文件my.conf中的参数,重启服务器
innodb_force_recovery=610.进入数据库,查看表结构,并记录创建表结构的语句。
show create table info;从ibd文件中恢复表数据
1.将my.conf中的参数innodb_force_recovery=6注释掉,恢复默认参数,重启mysql服务
2.删除info表,复制上面的创建表结构语句,重新创建info表
drop table info;
 CREATE TABLE `info` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `time` varchar(255) DEFAULT NULL,
  `hospital_num` varchar(255) DEFAULT NULL,
  `shu_name` varchar(255) DEFAULT NULL,
  `manager` varchar(255) DEFAULT NULL,
  `project` varchar(255) DEFAULT NULL,
  `zhu_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;3.删除当前的ibd文件
alter table info discard tablespace;4.替换idb文件
5.替换idb文件
alter table info import tablespace;转载的文章完了,下面是我根据这篇文章整理的处理方案。
看了一下,需要一个表一个表的处理,太麻烦了,所以我就偷懒拆了几步。
- 先去禅道把对应的禅道版本下下来 
- 找一台服务器,把禅道装好,会自动生成数据库 
- 把生成的数据库mysqldump导出来,只要结构 
- 在本地新建数据库,导入刚才的数据库结构,mysql source 
- 通过命令行登录mysql,先解除表跟ibd文件的绑定 
- 把老的表数据ibd文件替换新的ibd文件,并更改文件归属 
- 通过mysql的命令行重新建立绑定 
- 完工。 - 这也需要一个表一个表的处理,很麻烦。所以就用python来写脚本处理吧,脚本我就不放了,把流程放出来就行了。 - 如果用脚本写的话,可以一次性全部解绑,然后一次性全部替换改归属,再一次性全部建立绑定,这就很快了。可能中间会遇到没有数据的表,直接跳过就行了,没有数据就是对应的没有ibd文件。 
下面贴流程:
第一个:
1:mysql -uroot -p123456
2:use zentao;
3:ALTER TABLE table_name DISCARD TABLESPACE;//table_name是表名,每个表都要操作解绑
4:exit;
5:cp /www/server/data_copy/zentao/table_name.ibd /www/server/data/zentao/table_name.ibd
6:chown mysql:mysql /www/server/data/zentao/table_name.ibd//一定要改文件归属,不然没权限
7:mysql -uroot -p123456
8:use zentao;
9:ALTER TABLE table_name IMPORT TABLESPACE;//重新建立绑定
第二个开始,重复3-9 
  
   
 