本地服务器突然断电,结果系统起不来了。很悲剧。因为本地内网装了禅道,项目不重要,重要的是数据记录,所以就得把数据给恢复了,当时比较懒,也没有做定期的备份,现在手上只有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列
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=6
10.进入数据库,查看表结构,并记录创建表结构的语句。
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