mysql异常恢复工具_[MySQL异常恢复]mysql ibd文件恢复

在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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ddl是什么意思网络语_DDL(数据定义语言)

DDL,是对数据库内部的对象进行创建,删除,修改等的操作语言。它和DML语言最大的区别是DML只是对表内部数据的操作,而不涉及到表的定义,结构的修改,更不会涉及到其它对象。1.连接数据库:注:1.mysql代表客户端…

jsp mysql优点_asp、php、asp.net、jsp的介绍和各自的优缺点

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台,它的语法和Visual BASIC类似,可以像SSI(Server Side Include)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但…

测试网络的带宽指令_单机千万级MQTT服务器测试报告

目标:测试创建1000万客户端连接到Coolpy7 MQTT服务器端,服务器操作系统 Linux(任意一款发行版服务器版本)。分别在两台硬件一样的服务器,其中一台用于服务器端运行,另一台用于创建千万客户端连接客户端机器。在硬件一致的情况下请…

python邮箱爆破_Python在线爆破邮箱账号密码测试代码(亲测可用)

dic 字典格式如下(mail.txt) :usernamegmail.com:passwordusernamegmail.com:passwordusernamegmail.com:password以此类推,切记保存成utf-8编码格式。放置在当前脚本目录,也可自己定义修改。支持ssl https /imap协议。# version 3.4.0# codingUTF-8# ti…

查看redis aof内存_Redis持久化问题定位与优化技巧

今天主要分享继Redis持久化方式RDB、AOF之后的一些常用的Redis问题定位于优化方式。这里主要CPU、内存、磁盘在三个维度去分析问题!Fork操作当Redis做RDB或AOF重写时,一个必不可少的操作就是执行fork操作创建子进程,对于大多数操作系统来说fo…

mysql新增阵列df_DF学Mysql(三)——索引操作

概要:数据库对象索引其实与书的目录非常相似,主要是为了提高从表中检索数据的速度。由于数据存储在数据库表中,所以索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构(B-树或…

python本地浏览器注入js_PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例...

概要应同学邀请,演示如何使用 PyQt5 内嵌浏览器浏览网页,并注入 Javascript 脚本实现自动化操作。下面测试的是一个廉价机票预订网站(http://www.flyscoot.com/),关键点如下使用 QWebEngineView 加载网页,并显示进度。在默认配置(…

python装好了怎么启动车_【填空题】Python安装好后,可以直接在CMD命令行下输入( )命令, 可启动交互式编程,提示窗口如下:...

倾斜岩层的产状要素是用岩层层面的()。A.倾角B.走向C.范围D.倾向E.表面积采用深层搅拌法进行地基加固处理,其适用条件为()。A.砂砾石松软地基B.松散砂地基C.黏土软弱地基根据《建筑工程建筑面积计算规则》,下列关于建筑物雨篷结构的建筑面积计算&#xf…

windows设置mysql使用率_Windows下配置Mysql

这里说的配置Mysql,是在安装时进行的,请先查看:Windows平台下安装Mysql紧接上文,安装完成后将配置选项打上对勾,按下“Finish”,出现下面的界面,这里有一个很好的功能,mysql配置向导…

mysql 云无忧ps教程_华为云数据库MySQL一键开通读写分离,无忧应对企业业务高峰情景...

业务大促,订单暴增,网站流量暴涨几倍,数据库服务器容量又要扛不住了,眼睁睁看着生意白白溜走,再苦逼也无法解决,“肿”么办?别担心,一键开通读写分离,而且只需一个连接地…

mysql实体监听器_GitHub - langjiangit/spring-boot-starter-mysql-binlog: mysql的binlog监听器

mysql binlog监听器前置操作1.查看mysql是否开启binlogshow variables like log_bin;2.查看是否使用row格式的binlogshow variables like binlog_format;3.如果以上都不是请修改mysql的配置文件添加或者修改如下内容#配置binlog存放路径log-binE://mysql//binlog//mysql-bin#bi…

python 基因序列提取_科学网—简单的Python脚本提取对应位置基因序列(fasta文件) - 王彬忠的博文...

最近,用Python脚本提取,在基因号已知,位置已知条件下,相对应位置的基因序列时发现,这样很简单但是很实用的脚本,在网上却比较难找。而且,能被找到的脚本,相对于具有初级编程能力的人…

python不能安装在中文_无法在Python上安装表

我一直收到错误Command "python setup.py egg_info" failed with error code 1 in C:\Users\HP\AppData\Local\Temp\pip-install-sv33cp8y\tables\当尝试使用^{pr2}$我试过了pip install --upgrade setuptools还有很多其他的东西,但还是不能让它发挥作用。…

python是强定义语言吗_python是强类型语言吗

强弱是对类型而言的。强类型,你有一个值之后这个值是什么类型是确定,比如n1,n的类型是确定的(字符串),因此你不能在Python做n3 mn1运算。而弱类型就不是这样的,值的类型可以在需要的时候再去确定,比如PHP里…

mysql给字段添加描述_用sql 语句给字段添加描述

用sql 语句给字段添加描述IF not exists(SELECT * FROM ::fn_listextendedproperty (NULL, user, dbo, table, strTableName, column, strColumnName))BEGINexec sp_addextendedpropertyMS_Description, strColumnDesc , user, dbo, table,strTableName, column, strColumnName…

深入java核心_Java核心(五)深入理解BIO、NIO、AIO

导读:本文你将获取到:同/异步 阻/非阻塞的性能区别;BIO、NIO、AIO 的区别;理解和实现 NIO 操作 Socket 时的多路复用;同时掌握 IO 最底层最核心的操作技巧。BIO、NIO、AIO 的区别是什么?同/异步、阻/非阻塞…

java反射 获取参数类型_Java反射带参构造创建对象时如何自动转换参数类型

需求是这样的:有一个类,类的路径知道,例如是com.xx.xx.xx其中有不同类型的成员变量(个数未知),有对应的setter和getter方法,有一个无参构造和一个全参构造。现在需要用反射机制...需求是这样的:有一个类&am…

java的乐趣_分享java带来的快乐

2013年9月17日#2011年7月18日#function reportError(sMessage, sUrl, sLine) {var str "";str " 错误信息:" sMessage "\n";str " 错误地址:" sUrl "\n";str " 错误行数:" sLine "\n";str &…

java arraylist底层实现原理_ArrayList和LinkedList底层原理

ArrayList和LinkedList都是List的实现类,是在日常开发中经常被使用到的两个集合,我们来结合源码看下两个集合的不同之处。先来看下ArrayList的源码:// 默认的初始化大小private static final int DEFAULT_CAPACITY 10;ArrayList的底层数数组…

java ee jaas_java-ee – Tomcat-Jaas – 如何检索主题?

i knew that and it works, but I need to retrieve subject to get also roleprincipal不幸的是,它在Java EE中的工作方式不同. JAAS主题只是一个“主要包”,其中哪些代表用户/调用者主体和/或角色主体根本不是标准化的.每个其他容器在这里做不同的事情. Javadoc for Tomcat’…