您现在的位置: 365建站网 > 365学习 > Mysql数据库(innodb)损坏,通过idb和frm恢复表结构和数据的方法

Mysql数据库(innodb)损坏,通过idb和frm恢复表结构和数据的方法

文章来源:365jz.com     点击数:127    更新时间:2019-11-12 21:18   参与评论

我们知道MySQL中如果用的是MYISAM数据引擎,那么数据很好恢复,只要将相应.frm, .MYD, .MYI文件拷贝过去即可。但是如果是innodb的话,如果开启innodb_file_per_table=1,则每一个数据表都是一个单独的文件,比如User表,则会建立User.frm和User.ibd.


那么直接拷贝这两个文件到新的MySQL数据目录下可以吗,一般来说是不行的,那么什么时候可以呢?只有在你的ibd文件的tablespace id和ibdata1文件中的元信息的tablespace id一致才可以。


那么怎么办呢?根据之前讲的,innodb恢复不了就是因为table space id不匹配导致的。所以我们可以这样做 (以zhc_db数据库为例):


1 首先将当前mysql数据目录下的ibdata1文件和zhc_db下边的frm和ibd文件备份。


2 将之前要恢复的ibdata1和frm和ibd文件拷贝到当前的mysql数据目录下,进行覆盖。注意因为当前数据库可能还有其它数据库和表,所以这一步可能导致其它数据库出现问题。不过没关系,因为我们已经备份了。


3 保险起见,重启一下mysql吧,service mysql restart


4 直接登录到zhc_db数据库,mysql -u root -p zhc_db; 这时候你就可以show tables和select了,激动了吧,看到你的数据了吧。


5 将此数据库用mysqldump导出,mysqldump -u root -p[password] zhc_db > dump_zhc_db.sql


好了,你已经有了以前的数据和表定义。


6 最后一步,别忘了,将ibdata1文件和zhc_db下边的文件用之前的备份进行恢复。


7 重启mysql,然后你就可以将你的数据进行导入了。注意目录的权限一定是MySQL可读写的。


.frm恢复表结构


温馨提示:如果你已经恢复了表数据,可以直接忽略此操作,开始下一步操作


MySql创建每张表后都会在“mysql安装目录/data/数据库名/”目录下创建一个“表名.frm”文件。


该.frm文件并不能直接打开,但是它可以帮助你恢复你的表结构~~


具体操作如下:


1、准备恢复bhusk数据库中的表结构,其中bhusk数据库中包含了admin表。


2、我们首先连接数据库,创建数据库bhusk,自己可视化工具或许会快一点

create database bhusk;


3、然后在该数据库下创建表admin ,只需要包含一个简单的字段便可,主要是创建出一个同名的表,方便接下来的替换。

create table `admin`( id varchar(32) not null);


4、这一步请将mysql数据库服务关闭


5、将之前旧的数据库留下来的/data/bhusk/admin.frm文件覆盖掉现在新的数据库/data/bhusk目录下的admin.frm文件。


6、给这个admin.frm加权限,所有者mysql ,权限660(你可以参考别的ibd文件所有者和权限设置) (这一步几乎可以忽略)此步为linux权限操作


7、最后启动数据库,可以查表结构了


.idb恢复表数据


1、 现在admin表结构有了,开始准备恢复数据,如果通过以上方法恢复表结构,那一定在/data/bhusk/目录下会有admin.idb文件。


2、接下来执行alter table `admin` discard tablespace ;执行完之后,数据库目录下的user.ibd文件就没了


3、把你备份的ibd放到消失的admin.ibd文件那里。


4、给这个文件加权限,所有者mysql ,权限660(你可以参考别的ibd文件所有者和权限设置)(这一步几乎可以忽略)此步为linux权限操作


5、执行 alter table admin import tablespace; 执行完,表数据就可读了,这时候会丢失一些诸如表行记录数等存在系统表里的信息,不过那些信息无所谓。表其实这时候已经可以正常用了。如果不放心,可以导出sql语句或txt,再创建表导入。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (127人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------