本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
通过.ibd和.frm恢复mysql数据
mycodes · 347浏览 · 发布于2020-12-16 +关注

背景:因为机器损坏,数据库的索引文件什么的都损坏了。只留下了一个mysql的data目录…

此方法恢复数据的前提:建表用的innodb索引

 

备注:如果mysql的目录还都在,可以先尝试,将mysql下的目录都拷贝到一个新mysql目录下,启动看看能不能用,不能用后再尝试下面方法

 

mysql会有一个data目录存储表结构和表数据。下面的目录结构大概如下:

ib_logfile0

ib_logfile1

ibdata1

ibtmp1

xx数据库1

xx数据库2

 

每个数据库目录下面的表内容如下:

表1.frm

表1.ibd

表2.frm

表2.ibd

.frm文件:表结构文件

.ibd文件:表数据文件

 

下面为恢复数据方法

备注:这里假设要备注的库名为db1,表名为table1

1、先备份要恢复数据的表文件

table1.frm和table1.ibd文件

 

可以直接把原数据库的data目录整个拷贝过来,如果指定了data目录可以通过查看mysql的进程看到具体配置位置

2、新搭建一个mysql

我用的5.7,搭建在mac本地

3、将mysql下的log文件删除,不要保留和要备份的库相同的内容

如果你是完全新建的一个数据库,和原来的库表完全无关,可以忽略这步骤

 

rm -rf /usr/local/mysql/data/ib_logfile0

rm -rf /usr/local/mysql/data/ib_logfile1

rm -rf /usr/local/mysql/data/ibdata1

rm -rf /usr/local/mysql/data/btmp1

rm -rf /usr/local/mysql/data/db1

4、新建数据库

链接上mysql命令行

create database db1;

 

5、通过命令行新建原来的表,

注意,一定在建表命令后加【ROW_FORMAT=COMPACT】防止冲突

例如:

DROP TABLE IF EXISTS `table1`;
CREATE TABLE `table1` (
  `name` varchar(200) NOT NULL DEFAULT '' COMMENT 'key值',
  `value` varchar(500) DEFAULT NULL COMMENT 'value值',
  `desc` varchar(500) DEFAULT NULL COMMENT '关于当前key的描述信息',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

如果不记得表结构了,可以先参考下面的文章找回表结构,dump出sql结构后获得创建表的语句:

那要按照下面的步骤进行,然后再按照上面的流程执行:

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

2、创建一个表结构,和要恢复的表名是一样的。表里的字段无所谓。一定要是innodb引擎的。

  CREATE TABLE `test`(  `testID` bigint(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3、关闭mysql, service mysqld stop;

4、用需要恢复的frm文件覆盖刚新建的frm文件;  

5、修改my.ini 里  innodb_force_recovery=1 , 如果不成修改为 2,3,4,5,6。

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

6、将新建的表DISCARD掉

命令行执行:

ALTER TABLE table1 DISCARD TABLESPACE;

7、将备份的源表数据文件.ibd拷贝过来

将.ibd文件放到新数据库的data目录下,覆盖刚创建表时新生成的.ibd文件

 

即/usr/local/mysql/data/db1/下

8、将拷贝过来的.ibd表数据导入进来

ALTER TABLE  `table1` IMPORT TABLESPACE;

 

然后数据就恢复啦~~


相关推荐

使用SELECT语句检索数据

奔跑的男人 · 806浏览 · 2019-06-03 09:33:43
部署MySQL延迟从库的几个好处

吴振华 · 666浏览 · 2019-05-14 21:57:51
MongoDB凭什么跻身数据库排行前五?

iamitnan · 723浏览 · 2019-06-18 10:04:56
Oracle开启和关闭的几种模式

qq2360248666 · 752浏览 · 2019-06-04 10:18:47
加载中

0评论

评论
我从事编程工作,现在在一家网络公司上班,偶尔也是发布博客,逛论坛等,希望可以在这里交到志同道合的朋友。
分类专栏
小鸟云服务器
扫码进入手机网页