在mysql中由于某种原因保存有ibd文件,但是表已经被删除或者frm文件损坏亦或者ibdata文件损坏/丢失等。本文模拟在这种情况下,通过mysql自身技术即可完成ibd文件恢复.

测试环境mysql版本

mysql> select version();

+-----------+

| version() |

+-----------+

| 5.6.25 |

+-----------+

1 row in set (0.00 sec)

mysql主要参数

mysql> show variables like 'innodb_file_per_table';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| innodb_file_per_table | ON |

+-----------------------+-------+

1 row in set (0.00 sec)

mysql> show variables like 'innodb_force_recovery';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| innodb_force_recovery | 0 |

+-----------------------+-------+

1 row in set (0.00 sec)

innodb_file_per_table这个参数为on才能够实现每个表存储单独的ibd文件.innodb_force_recovery参数默认范围0

测试表情况

mysql> use xifenfei;

Database changed

mysql> show tables;

+-----------------------------+

| Tables_in_xifenfei |

+-----------------------------+

| user_login |

+-----------------------------+

1 rows in set (0.00 sec)

mysql> select count(*) from user_login;

+----------+

| count(*) |

+----------+

| 48 |

+----------+

1 row in set (0.02 sec)

mysql> desc user_login;

+------------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+--------------+------+-----+---------+-------+

| ID | varchar(255) | NO | PRI | NULL | |

| ACCOUNT | varchar(255) | YES | | NULL | |

| LifeCycle | int(11) | YES | | NULL | |

| Name | varchar(255) | YES | | NULL | |

| Password | varchar(255) | YES | | NULL | |

| Role | varchar(255) | YES | | NULL | |

| UTime | varchar(255) | YES | | NULL | |

| UserID | varchar(255) | YES | | NULL | |

| UserName | varchar(255) | YES | | NULL | |

| UserStatus | int(11) | YES | | NULL | |

+------------+--------------+------+-----+---------+-------+

10 rows in set (0.05 sec)

mysql> select * from user_login limit 1;

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

| ID | ACCOUNT | LifeCycle | Name | Password

| Role | UTime | UserID

| UserName | UserStatus |

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

| 010d6c85a76c44cba80d07cbd8590bb2 | hyh | 0 | 胡元会 | 698d51a19

d8a121ce581499d7b701668 | |6| | 2016-08-30 06:04:32 | 0fe3bc4dd9654687a4b85065e

d5cfee8 | NULL | 1 |

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

1 row in set (0.00 sec)

mysql> show create table user_login \G;

*************************** 1. row *************

Table: user_login

Create Table: CREATE TABLE `user_login` (

`ID` varchar(255) NOT NULL,

`ACCOUNT` varchar(255) DEFAULT NULL,

`LifeCycle` int(11) DEFAULT NULL,

`Name` varchar(255) DEFAULT NULL,

`Password` varchar(255) DEFAULT NULL,

`Role` varchar(255) DEFAULT NULL,

`UTime` varchar(255) DEFAULT NULL,

`UserID` varchar(255) DEFAULT NULL,

`UserName` varchar(255) DEFAULT NULL,

`UserStatus` int(11) DEFAULT NULL,

PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

mysql> show variables like 'datadir';

+---------------+-----------------------------------------------+

| Variable_name | Value |

+---------------+-----------------------------------------------+

| datadir | D:\xifenfei\mysql-5.6.25-winx64\data\ |

+---------------+-----------------------------------------------+

1 row in set (0.00 sec)

备份ibd文件

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驱动器 D 中的卷没有标签。

卷的序列号是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目录

2016-12-02 20:07 98,304 user_login.ibd

1 个文件 98,304 字节

0 个目录 78,789,591,040 可用字节

C:\Users\XIFENFEI>cp D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd d:/

C:\Users\XIFENFEI>dir d:\user_login.ibd

驱动器 D 中的卷没有标签。

卷的序列号是 4215-1F18

d:\ 的目录

2016-12-25 23:15 98,304 user_login.ibd

1 个文件 98,304 字节

0 个目录 78,789,591,040 可用字节

模拟删除表(ibd文件也被删除)

mysql> drop table xifenfei.user_login;

Query OK, 0 rows affected (0.03 sec)

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驱动器 D 中的卷没有标签。

卷的序列号是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目录

找不到文件

创建新表

mysql> CREATE TABLE `user_login` (

-> `ID` varchar(255) NOT NULL,

-> `ACCOUNT` varchar(255) DEFAULT NULL,

-> `LifeCycle` int(11) DEFAULT NULL,

-> `Name` varchar(255) DEFAULT NULL,

-> `Password` varchar(255) DEFAULT NULL,

-> `Role` varchar(255) DEFAULT NULL,

-> `UTime` varchar(255) DEFAULT NULL,

-> `UserID` varchar(255) DEFAULT NULL,

-> `UserName` varchar(255) DEFAULT NULL,

-> `UserStatus` int(11) DEFAULT NULL,

-> PRIMARY KEY (`ID`)

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.03 sec)

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驱动器 D 中的卷没有标签。

卷的序列号是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目录

2016-12-25 23:19 98,304 user_login.ibd

1 个文件 98,304 字节

0 个目录 78,789,591,040 可用字节

mysql> select count(*) from xifenfei.user_login;

+----------+

| count(*) |

+----------+

| 0 |

+----------+

1 row in set (0.00 sec)

停掉mysql,替换user_login.ibd

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驱动器 D 中的卷没有标签。

卷的序列号是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目录

2016-12-25 23:22 98,304 user_login.ibd

1 个文件 98,304 字节

0 个目录 78,787,141,632 可用字节

C:\Users\XIFENFEI>cp d:\user_login.ibd D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驱动器 D 中的卷没有标签。

卷的序列号是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目录

2016-12-02 20:07 98,304 user_login.ibd

1 个文件 98,304 字节

0 个目录 78,787,141,632 可用字节

启动mysql 服务,查询数据库

mysql> select count(*) from xifenfei.user_login;

ERROR 2013 (HY000): Lost connection to MySQL server during query

mysql> exit

Bye

C:\Users\XIFENFEI>mysql -uroot

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

mysql 日志报错

2016-12-25 23:31:07 11632 [Note] MySQL: ready for connections.

Version: '5.6.25' socket: '' port: 3306 MySQL Community Server (GPL)

InnoDB: Error: tablespace id is 56 in the data dictionary

InnoDB: but in file .\xifenfei\user_login.ibd it is 47!

2016-12-25 23:31:31 2eb8 InnoDB: Assertion failure in thread 11960 in file fil0fil.cc line 796

InnoDB: We intentionally generate a memory trap.

InnoDB: Submit a detailed bug report to http://bugs.mysql.com.

InnoDB: If you get repeated assertion failures or crashes, even

InnoDB: immediately after the mysqld startup, there may be

很明显由于替换的ibd文件和现在数据库记录的ibd文件的page的字典信息不匹配,因为数据库无法正常查询该数据,而且mysql为了安全直接把实例给crash了.

恢复操作

mysql> show variables like 'innodb_force_recovery';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| innodb_force_recovery | 1 |

+-----------------------+-------+

1 row in set (0.00 sec)

mysql> alter table xifenfei.user_login discard tablespace;

Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> alter table xifenfei.user_login import tablespace;

Query OK, 0 rows affected, 1 warning (0.06 sec)

mysql> select count(*) from xifenfei.user_login;

+----------+

| count(*) |

+----------+

| 48 |

+----------+

1 row in set (0.00 sec)

mysql> select * from xifenfei.user_login limit 1;

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

| ID | ACCOUNT | LifeCycle | Name | Password

| Role | UTime | UserID

| UserName | UserStatus |

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

| 010d6c85a76c44cba80d07cbd8590bb2 | hyh | 0 | 胡元会 | 698d51a19

d8a121ce581499d7b701668 | |6| | 2016-08-30 06:04:32 | 0fe3bc4dd9654687a4b85065e

d5cfee8 | NULL | 1 |

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

1 row in set (0.00 sec)

通过mysql自带的discard tablespace和import tablespace操作后,表数据已经可以完成查询了.

mysql日志

2016-12-25 23:34:08 10464 [ERROR] InnoDB: Failed to find tablespace for table '"xifenfei"."user_login"' in the cache. Attempting to load the tablespace with space id 56.

2016-12-25 23:34:08 10464 [ERROR] InnoDB: In file '.\xifenfei\user_login.ibd', tablespace id and flags are 47 and 0, but in the InnoDB data dictionary they are 56 and 0. Have you moved InnoDB .ibd files around without using the commands DISCARD TABLESPACE and IMPORT TABLESPACE? Please refer to http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting-datadict.html for how to resolve the issue.

2016-12-25 23:34:08 10464 [ERROR] InnoDB: Could not find a valid tablespace file for 'xifenfei/user_login'. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting-datadict.html for how to resolve the issue.

2016-12-25 23:34:08 30e8 InnoDB: cannot calculate statistics for table "xifenfei"."user_login" because the .ibd file is missing. For help, please refer to http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html

2016-12-25 23:34:08 10464 [ERROR] InnoDB: Cannot delete tablespace 56 because it is not found in the tablespace memory cache.

2016-12-25 23:34:08 10464 [Warning] InnoDB: Cannot delete tablespace 56 in DISCARD TABLESPACE. Tablespace not found

2016-12-25 23:34:41 10464 [Note] InnoDB: Sync to disk

2016-12-25 23:34:41 10464 [Note] InnoDB: Sync to disk - done!

2016-12-25 23:34:41 10464 [Note] InnoDB: Phase I - Update all pages

2016-12-25 23:34:41 10464 [Note] InnoDB: Sync to disk

2016-12-25 23:34:41 10464 [Note] InnoDB: Sync to disk - done!

2016-12-25 23:34:41 10464 [Warning] InnoDB: Tablespace 'xifenfei/user_login' exists in the cache with id 47 != 56

2016-12-25 23:34:41 10464 [Warning] InnoDB: Freeing existing tablespace 'xifenfei/user_login' entry from the cache with id 56

2016-12-25 23:34:41 10464 [Note] InnoDB: Phase III - Flush changes to disk

2016-12-25 23:34:41 10464 [Note] InnoDB: Phase IV - Flush complete

mysql日志依旧报了page字典信息不匹配.但是数据已经可以访问,通过mysqldump导出重新创建表即可.如果由于ibd损坏使用该方法无法恢复,请参考:MySQL drop database恢复(恢复方法同样适用MySQL drop table,delete,truncate table)

mysql异常恢复工具_[MySQL异常恢复]mysql ibd文件恢复相关推荐

  1. mysql innodb ibd_MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据

    记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...

  2. 关于MySQL的ibd文件恢复数据

    关于MySQL的ibd文件恢复数据 我们的服务器由于停电异常关机,重启后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是数据库没有进行及时备份,只能想办法从数据库文件当中恢复,查找 ...

  3. mysql ibd文件还原_Mysql 通过ibd文件恢复数据

    由于未关闭mysql服务就将服务器重启,导致服务器无法重启,使用fsck修复磁盘后启动服务器后,发现mysql数据文件损坏和丢失,但还存在idb文件. 数据库版本:5.7.20 什么是idb文件 如何 ...

  4. mysql拷贝恢复.frm_通过.frm .ibd文件恢复MySQL数据

    重新安装完mysql,当我初始化MySQL的时候,报错提示以前的数据目录还存在着,于是把之前的数据拷贝到其他目录,然后初始化成功.由于以前的数据还存在,我便想将以前的数据迁移的刚安装的MySQL中. ...

  5. mysql清理 frm_通过.frm .ibd文件恢复MySQL数据

    重新安装完mysql,当我初始化MySQL的时候,报错提示以前的数据目录还存在着,于是把之前的数据拷贝到其他目录,然后初始化成功.由于以前的数据还存在,我便想将以前的数据迁移的刚安装的MySQL中. ...

  6. mysql frm ibd 创建表_MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法

    MySQL中.frm文件:保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关. MySQL中.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_pe ...

  7. Mysql 通过ibd文件恢复数据

    Mysql ibd文件恢复问题 恢复步骤 1.创建数据库(随意创建) 2.创建数据表(备注:表结构要和要恢复的表结构一致,row_format要和ibd文件的row_format一致,否则,会提示两者 ...

  8. mysql .ibd恢复数据_mysql 根据ibd文件恢复数据

    恢复 recover_user.ibd 文件 1.创建数据库recover_ibd 2.创建相同结构表(若有其他库中相同结构表,可根据show create table recover_user;获取 ...

  9. Mysql怎么通过ibd文件恢复数据

    这篇文章主要介绍了Mysql怎么通过ibd文件恢复数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mysql怎么通过ibd文件恢复数据文章都会有所收获,下面我们一起来看 ...

最新文章

  1. js、jquery相关的操作
  2. 提高系统性能——对SQL语句优化的思考
  3. Java NIO ———— Buffer 缓冲区详解
  4. android webview远程调试
  5. linux c curl 乱码,curl获取结果乱码的解决方法之CURLOPT_ENCODING(curl/Post请求)
  6. UIPageControl 分页
  7. java中contains的用法_好程序员Java教程分享Java中this的几种用法
  8. 谷歌翻译接口_QTranslate:电脑全局翻译神器
  9. 硬刚Hive | 4万字基础调优面试小总结
  10. STM32管脚的复用和重定义功能(RCC_APB2Periph_AFIO)
  11. 计算机房电磁辐射防护,机房防辐射处理解决方案
  12. 【jeecg-boot项目开发crm】:day07JeecgBoot-零基础入门视频-05Online表单子表JS增强写法【p4】
  13. java实现26个大写字母的遍历
  14. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例62
  15. GPS接收机-从射频信号到定位解算
  16. Ceph PG 归置组状态
  17. On Die Termination (ODT) DDR
  18. 2018年最新Python学习路线图
  19. js控制网页动态效果
  20. 推荐四个Flutter重磅开源APP项目!

热门文章

  1. 企业实战_04_MyCat常用配置文件详解
  2. 玩转微服务日志框架Logback
  3. 系统架构设计师 - 构件
  4. 自定义Valid注解,校验List集合
  5. util中注入service
  6. 02年六代雅阁的整备质量_2020年宝安第八批更新计划:联投地产5.4万㎡“工改”项目...
  7. Python 线程优先队列 PriorityQueue - Python零基础入门教程
  8. Python 线程障碍对象 Barrier - Python零基础入门教程
  9. weex android 性能,跨越适配性能那道坎,企鹅电竞Android weex优化
  10. 服务器修改用户组权限设置,如何:修改用户的权限