mysql innodb只有 .frm .ibd 文件 如何恢复数据

原创 2016年08月31日 16:49:55

今天同学给我发信息说mysql库坏了,问怎么恢复,然后给我发来两个文件attachment.frm attachment.ibd文件,让我帮忙恢复一下数据,现在对这个恢复过程记录一下:

1.确认innodb_file_per_table = 1

这里恢复方法只适用innodb_file_per_table = 1也就是独立表空间的表,不适用公用表空间的表。

这个可以从配置文件里查看,或者登录原mysql执行show variables like '%innodb_file_per_table%';查看,为1或为on。


2.确认mysql版本

确认原mysql的版本,恢复使用的mysql最好与原mysql是同一个版本,查看版本的方式有许多,例如:select version();

我同学的mysql是5.1的,我没有那么古老的版本实例,就用了5.6,结果发现也可以。


3.恢复表结构

在恢复实例上创建一个全新的数据库test2:

mysql> create database test2;

创建与文件名一样的表,表的字段随便创建一个就行,因为我们也不知道原表都有什么字段:

mysql> CREATE TABLE `attachment`( `weiboid` bigint(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;


4.关闭mysql

/etc/init.d/mysql stop


5.复制文件

将同学发来的要恢复的attachment.frm文件复制到test2的数据目录下,覆盖掉原来的attachment.frm文件

[root@test1 test2]# mv attachment.frm attachment.frm.bak

[root@test1 test2]# cp ../attachment.frm ./ 

注意一定要修改文件的权限:
[root@test1 test2]# chown mysql.mysql attachment.frm
[root@test1 test2]# ll
total 120
-rw-r--r-- 1 mysql mysql  8979 Aug 12 21:55 attachment.frm
-rw-rw---- 1 mysql mysql  8870 Aug 13 00:38 attachment.frm.bak
-rw-rw---- 1 mysql mysql 98304 Aug 13 00:38 attachment.ibd


6.修改my.cnf

vi /etc/my.cnf

#在[mysqld]项下增加以下参数

innodb_force_recovery = 6


7.重启mysql

/etc/init.d/mysql start


8.查看表结构

mysql> use test2

mysql> show create table attachment;
ERROR 1146 (42S02): Table 'test2.attachment' doesn't exist

报错,去看看错误日志,发现问题还不少,有如下一段信息:

2016-08-13 00:33:26 31238 [ERROR] InnoDB: Failed to find tablespace for table '"test2"."attachment"' in the cache. Attempting to load the tablespace with space id 36.
2016-08-13 00:33:26 31238 [Warning] InnoDB: table test2/attachment contains 1 user defined columns in InnoDB, but 9 columns in MySQL. Please check INFORMATION_SCHEMA.INNODB_SYS_COLUMNS and http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how to resolve it
2016-08-13 00:33:26 31238 [Warning] InnoDB: Cannot open table test2/attachment from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2016-08-13 00:33:41 7f2441eb5700  InnoDB: table "test2"."attachment"is corrupted. Please drop the table and recreate
2016-08-13 00:33:41 31238 [Warning] InnoDB: Cannot open table test2/attachment from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.

标红的信息说attachment表只定义了一列但现在发现了9列。没关系我们只需重建一个有9列的attachment表就行,列名和类型等随意。

关闭mysql,将innodb_force_recovery = 6注释掉或=0,重启mysql,然后重建attachment表:

mysql> drop table attachment;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
Empty set (0.00 sec)

mysql> CREATE TABLE `attachment`( 
    -> `weiboid` bigint(20),
    -> `weiboid2` bigint(20),
    -> `weiboid3` bigint(20),
    -> `weiboid4` bigint(20),
    -> `weiboid5` bigint(20),
    -> `weiboid6` bigint(20),
    -> `weiboid7` bigint(20),
    -> `weiboid8` bigint(20),
    -> `weiboid9` bigint(20),
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.04 sec)

再关闭mysql,复制attachment.frm文件,修改参数innodb_force_recovery = 6,重启mysql,再查看表结构:

mysql> use test2

mysql> show create table attachment;

mysql> show create table attachment\G
*************************** 1. row ***************************
       Table: attachment
Create Table: CREATE TABLE `attachment` (
  `AID` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ؔնΨһID',
  `POSITION` tinyint(3) unsigned NOT NULL COMMENT 'λ׃',
  `MODULE` tinyint(3) unsigned NOT NULL COMMENT '¶Փ¦attachment_module±ģ¿鶄module_idºç,
  `YM` char(4) NOT NULL COMMENT 'ŪՂ',
  `ATTACH_ID` int(11) NOT NULL COMMENT '¸½¼þID',
  `ATTACH_FILE` varchar(200) NOT NULL COMMENT '¸½¼þτ¼þ',
  `ATTACH_NAME` varchar(200) NOT NULL COMMENT '¸½¼þĻ³ħ,
  `ATTACH_SIGN` bigint(20) NOT NULL COMMENT '±꽇',
  `DEL_FLAG` tinyint(3) unsigned NOT NULL COMMENT 'ɾ³
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mysql错误解决总结

1、 MySQL错误日志里出现: 140331 10:08:18 [ERROR] Error reading master configuration 140331 10:08:18...

[ERROR] InnoDB: Could not find a valid tablespace file

mysql启动报下述错误: [ERROR] InnoDB: Could not find a valid tablespace file for 'test/sys_log'. See http:...

mysql 初识之日志文件篇

麻雀虽小,五脏俱全。MySQL虽然以简单著称,但其内部结构并不简单。本章从MySQL物理组成、逻辑组成,以及相关工具几个角度来介绍MySQL的整体架构组成

mysql初识之数据文件及其他文件

在mysql中数据文件存放于在my.cnf中datadir指定的路径,使用的表引擎不同产生的文件格式、表文件个数也会有所差异。mysql的表引擎有多种,表的扩展名也不一样,如innodb用“ .ibd...

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

一次恢复数据库表结构和数据的实战,仅以此贴作为记录。   由于,前几天我们使用的数据库被入侵(顺便鄙视一下安全管理人员),数据库中的表都显示不存在(仅剩一个黑客自建的----qq_xxxxx的表,但物...

[ERROR] Cannot find or open table wu777/processlist from the internal data dictionary of InnoDB tho

错误日志报错: 160719 14:51:01 [ERROR] Cannot find or open table wu777/processlist from the internal data...

MySQL的error

今天遇到了这样的错误: 100925  4:11:54 [ERROR] Cannot find or open table dbt2/item fromthe internal data dictio...

mysql从.frm和.ibd文件恢复数据库

下载 MySQL Utilities http://dev.mysql.com/downloads/utilities/ 需要安装https://www.microsoft.com/...

为什么MySQL表只对应一个.frm文件,没有.MYD 和.MYI文件

今天在学习MySQL的时候,发现新建一个数据库表的时候,表只对应一个.frm文件,却没有.MYD 和.MYI文件。 经过一番查找之后才发现,我本地的MySQL存储表的时候,使用的默认数据库存储引擎是...

mysql使用“.frm”文件恢复表结构

mysql创建每张表后都会在“mysql安装目录/data/数据库名/”目录下创建一个“表名.frm”文件。 该.frm文件并不能直接打开,但是它可以帮助你恢复你的表结构~~ 具体操作如下: 我现在准...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)