资讯专栏INFORMATION COLUMN

MySQL表结构为InnoDB类型从ibd文件恢复数据

fobnn / 1575人阅读

摘要:创建一个表结构,和要恢复的表名是一样的。启动,就能到表结构信息了。把之前要恢复的文件复制到新的表结构文件夹下。修改表结构使当前的表结构和脱离关系。

1、找回表结构,如果表结构没有丢失直接到下一步

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

b、创建一个表结构,和要恢复的表名是一样的。表里的字段无所谓。一定要是innodb引擎的。CREATE TABLE weibo_qq0( 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 weibo_qq0 就能li到表结构信息了。

2、找回数据。记得上面把 innodb_force_recovery改掉了,需要注释掉,不然恢复模式不好操作。 这里有个关键的问题,就是innodb里的任何数据操作都是一个日志的记录点。也就是如果我们需要数据恢复,必须把之前的表的数据的日志记录点添加到一致。

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

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

c、把之前要恢复的 .ibd文件复制到新的表结构文件夹下。 使当前的ibd 和frm发生关系。ALTER TABLE weibo_qq0 IMPORT TABLESPACE; 结果不出意外肯定会报错。就和我们开展数据开始说的那样,数据记录点不一致。我们看看之前ibd记录的点在什么位置。开始执行 import tablespace,报错 ERROR 1030 (HY000): Got error -1 from storage engine。找到mysql的错误日志,InnoDB: Error: tablespace id in file ‘.testweibo_qq0.ibd’ is 112, but in the InnoDB InnoDB: data dictionary it is 1. 因为 weibo_qq0 之前的记录点在112,当前的表只创建一次,所以记录点是1.

d、那怎么从1记录到112。for ($1=1; $i<=111; $1++) {CREATE TABLE t# (id int) ENGINE=InnoDB;} 也许很奇怪,为什么是循环111,不是112。因为在a执行创建表结构的时候已经记录增加了一次。

e、修改表结构 alter table weibo_qq0 discard tablespace;使当前的表结构和ibd脱离关系。复制.ibd到当前的目录结构。

f、使原来数据的ibd和当前frm建立关系。 ALTER TABLE product IMPORT TABLESPACE; 这个时候没有错误,说明已经建立好了。但是查询数据还是查不出来。

g、相比这里大家已经知道为什么了,这个模式也不是说改了数据库就可以在生产环境使用。更改 innodb_force_recovery=1 , 如果不成修改为 2,3,4,5,6。直到可以 查询出数据为止,然后dump出来。数据就备份出来了。

h、把所有数据导出后,在新的数据库导入。所有数据就生成了。

扩展问题,很多时候我们是分表表结构怎么批量操作,提高速度呢。用循环!循环把表的空间废弃掉。

for i in seq 0 111; do mysql -uroot -P33061 -h127.0.0.1 -Dtestdd -e “CREATE TABLE inv_crawl_weibo_qq$i (id bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)) ENGINE=innodb “; done

ALTER TABLE inv_crawl_weibo_qq0 DISCARD TABLESPACE;

从备份数据把ibd复制cp到dd数据库下,注意复制过来的文件权限。

循环导入表空间。

ALTER TABLE inv_crawl_weibo_qq0 IMPORT TABLESPACE;

没有报错就导入成功了

摘自http://www.linuxidc.com/Linux...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47099.html

相关文章

  • mysql怎么通过frm和ibd文件还原数据

    摘要:使当前的和发生关系。就和我们开展数据开始说的那样,数据记录点不一致。修改表结构使当前的表结构和脱离关系。直到可以查询出数据为止,然后出来。把所有数据导出后,在新的数据库导入。所有数据就生成了。 1、找回表结构,如果表结构没有丢失直接到下一步 a、先创建一个数据库,这个数据库必须是没有表和任何操作的。 b、创建一个表结构,和要恢复的表名是一样的。表里的字段无所谓。一定要是innodb引擎...

    沈俭 评论0 收藏0
  • 基于Xtrabackup及可传输空间实现多源数据恢复

    摘要:在以后支持了可传输表空间以及针对该功能在备份时提供了一个对应参数该参数支持对存储引擎表的备份数据转换,且与常规备份操作一样可生成备份时间点的信息信息结合这两特性可以更高效和快速的方式实现多库数据汇聚的初始导入操作。 本文目录一、使用背景1.可传输表空间基本流程2.使用前提条件/限制二、技术要点三、实施步骤1.实验环境2.源端操作 1) 造测试数据并模拟小压力 2) 备份单库数据 3) ...

    forrest23 评论0 收藏0
  • 【划重点】MySQL技术内幕:InnoDB存储引擎

    摘要:说明本文绝大部分内容来源技术内幕存储引擎一书,部分图片来源网络。脏页存储于,表示缓冲池中的页与磁盘页不一致,等待被调度刷新。脏页数量太多,比如占据缓冲池比例大于时,强制进行刷新,比例可调。 说明 本文绝大部分内容来源《MySQL技术内幕:InnoDB存储引擎》一书,部分图片来源网络。#我是搬运工# InnoDB 体系结构 后台线程 InnoDB存储引擎是多线程模型,其后台有多个不同的后...

    wuaiqiu 评论0 收藏0
  • mysql利用对象数据文件恢复数据

    摘要:引擎文件数据文件文件索引文件引擎和重做日志文件两个文件一模一样,之所以存在两个是,为了避免一个文件损坏后,而且之后,无法恢复数据。引擎表恢复数据直接备份,,文件,然后再复制粘贴到目标数据库文件夹即可。参考文章利用数据库文件恢复数据 数据库文件基础 .frm文件: 只存储表的结构信息,frm文件跟数据库存储引擎无关,这也就是说,它和表的索引、数据都无关。 MyISAM引擎 .myd文件...

    LiveVideoStack 评论0 收藏0
  • MySQL存储引擎详解

    摘要:一常用存储引擎及特点存储引擎从版本之后,的默认内置存储引擎已经是了,他的主要特点有灾难恢复性比较好支持事务。 一、MySQL常用存储引擎及特点 1、InnoDB存储引擎 从MySQL5.5版本之后,MySQL的默认内置存储引擎已经是InnoDB了,他的主要特点有: (1)灾难恢复性比较好;(2)支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。(3)使用的锁...

    Achilles 评论0 收藏0

发表评论

0条评论

fobnn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<