排行榜

MySql通过.frm和.ibd 文件恢复数据库

本文阅读 4 分钟
首页 运维中心 正文
广告

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



转载的文章完了,下面是我根据这篇文章整理的处理方案。


看了一下,需要一个表一个表的处理,太麻烦了,所以我就偷懒拆了几步。

  1. 先去禅道把对应的禅道版本下下来

  2. 找一台服务器,把禅道装好,会自动生成数据库

  3. 把生成的数据库mysqldump导出来,只要结构

  4. 在本地新建数据库,导入刚才的数据库结构,mysql source

  5. 通过命令行登录mysql,先解除表跟ibd文件的绑定

  6. 把老的表数据ibd文件替换新的ibd文件,并更改文件归属

  7. 通过mysql的命令行重新建立绑定

  8. 完工。

    这也需要一个表一个表的处理,很麻烦。所以就用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



本文经授权后发布,本文观点不代表立场,文章出自:https://blog.csdn.net/u010009053/article/details/130268154
Win10外接显示器鼠标卡顿的问题(已解决)
« 上一篇 05-24
Centos7中MySQL忘记密码处理方法
下一篇 » 06-06
广告

相关推荐