使用ibdata1和frm文件恢复MySQL数据库

提供ibdata1和frm文件恢复数据库的方法之一,仅供参考

========== 1. 应用背景 ==========

为了应付9月的计算机二级MySQL考试,买了一套题库。但是在练操作题的时候发现其中的十几套试卷大题都只提供了frm文件和ibdata1文件,不能像有的备份里面有.MYI文件,.MYD文件,.frm文件,把这些直接复制到…/mysql/data/NewDatabaseName/下面,然后在Navicat里打开NewDatabaseName这个数据库就能直接看到表了。

看了N多篇CSDNer们的分享,都提到了把新的ibdata1复制到…/mysql/data文件夹下替代原本的ibdata1,但是我发现原本的ibdata1里还有一些重要的数据。如果这么办的话这些数据就全白给了。如果备份常用的旧ibdata1文件又太麻烦。折腾了几个小时后选择放弃,到办公室里的新电脑上安装了wamp+Navicat,成功导入数据库。欲知操作过程,请移步3、4。

========== 2. 基础知识 ==========

在恢复或者导入数据库的时候,如果不清楚.frm文件+ibdata1 这种备份和.frm+.ibd文件备份、.frm+.MYI+.MYD文件备份之间的区别,可能会走一些弯路。

  1. .frm文件+ibdata1(该数据库使用了InnoDB存储引擎)
    通俗一点说,frm只有表的结构,比如这样的
studentnostudentname
NULLNULL

实际上表里空空如也,我们需要的数据是放在自动扩展数据文件ibdata1里的,所以说如果只是导入了frm的话,只能打开一个空表。我试过一种方法是先创建一个空表,表名和要导入的表一样,表内结构随意,然后再导入ibdata1和.frm文件,但貌似没什么用。

  1. .frm+.MYI+.MYD文件(该数据库使用了MyISAM存储引擎)
    使用MyISAM引擎存储的数据库生成3个文件:①同样的,frm文件存储表定义;②.MYD(MYData)文件是存储数据的文件;③.MYI(MYIndex)是索引文件

如果想要进一步了解MySQL各类引擎,指路MySQL多种存储引擎简介

========== 3. 操作过程 ==========

因为我只尝试了用frm文件和ibdata1导入新的数据库,所以只介绍这种情况。
过程中参考了大佬的分享数据库恢复教程

step1. 停止MySQL服务
step2. 打开my.ini,在[mysqld]后面加上一句innodb_force_recovery= 4
step3. 删掉…/mysql/data下的.err文件和ib_logfile0和ib_logfile1
step4. 在…/mysql/data下创建一个和将要导入的frm文件原先所属数据库同名的文件夹(即新数据库),把frm文件放进去。把ibdata1文件放在…/mysql/data文件夹下,替换掉旧的ibdata1。给旧的ibdata1备份也可,但是如果旧的ibdata1使用频繁,回头用的时候还得再重复一遍这个操作过程太麻烦。
step5. 启动MySQL服务,再次关闭MySQL服务
step6. 注释掉在my.ini里加的那一行,重新启动MySQL服务,在Navicat里打开新数据库里的表

========== 4. 注意事项 ==========

  1. 导入新数据库的时候,新数据库的名字不能随便起一个,一定要按照这个数据库原先的名字。否则就会出现明明步骤都对了但是最后显示表不存在error: 1146: Table DatabaseWrongName.Table doesn't exist。至于内在的原理,我还在探索中…
  2. 有的小伙伴说导入新数据库后mysql启动不了,我是因为把ibdata1文件夹放在…/mysql/data/NewDatabaseName文件夹下而不是…/mysql/data文件夹下,出现过这种情况。如果有其他原因欢迎讨论。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值