Mysql 经过frm&ibd 恢复数据

mysql存储在磁盘中,各类天灾人祸都会致使数据丢失。大公司的时候咱们经常须要作好数据冷热备,对于小公司来讲要作好全部数据备份须要支出大量的成本,不少公司也是不现实的。万一尚未作好备份,数据被误删除了,或者ibdata损坏了怎么办呢?别担忧,只要有部分的frm、ibd存在就能够恢复部分数据。mysql

注意:sql

1、这个是对innodb的数据恢复。myisam不须要这么麻烦,只要数据文件存在直接复制过去就能够。数据库

2、你们的mysql数据库必须是按表存放数据的,默认不是,可是你们生产确定是按分表设置的吧,若是不是,很差意思,这个方法不能恢复你的数据。日志

      my.ini的设置为 innodb_file_per_table = 1。innodb

一、找回表结构,若是表结构没有丢失直接到下一步table

a、先建立一个数据库,这个数据库必须是没有表和任何操做的。file

b、建立一个表结构,和要恢复的表名是同样的。表里的字段无所谓。service

 必定要是innodb引擎的。CREATE TABLE `ax_table`( `weiboid` bigint(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;方法

c、关闭mysql, service mysqld stop; 数据

d、用须要恢复的frm文件覆盖刚新建的frm文件;

e、修改my.ini 里 innodb_force_recovery=1 , 若是不成修改成 2,3,4,5,6。

f、 启动mysql,service mysqld start;show create table ax_table 就能看到表结构信息了。

二、找回数据。记得上面把 innodb_force_recovery改掉了,须要注释掉,否则恢复模式很差操做。

  这里有个关键的问题,就是innodb里的任何数据操做都是一个日志的记录点。

  也就是若是咱们须要数据恢复,必须把以前的表的数据的日志记录点添加到一致。

a、创建一个数据库,根据上面导出的建立表的sql执行建立表。

b、找到记录点。先要把当前数据库的表空间废弃掉,使当前ibd的数据文件和frm分离。 ALTER TABLE ax_table DISCARD TABLESPACE;

c、把以前要恢复的 .ibd文件复制到新的表结构文件夹下。 使当前的ibd 和frm发生关系。ALTER TABLE ax_table IMPORT TABLESPACE;  

这个时候没有错误,说明已经创建好了。若是能查到数据,到此就OK了,若是不行,请执行以下操做。

d、相比这里你们已经知道为何了,这个模式也不是说改了数据库就能够在生产环境使用。更改 innodb_force_recovery=1 , 若是不成修改成 2,3,4,5,6。直到能够 查询出数据为止,而后dump出来。数据就备份出来了。

e、把全部数据导出后,在新的数据库导入。全部数据就生成了。  

相关文章
相关标签/搜索