亲测,不清楚表结构的情况下,从.frm和.ibd文件中恢复数据,导入MySQL数据库成功。
废话不说,直接上手。
前言:.frm 表结构
.ibd 数据文件和索引
任务说明:比如我们手上有bilibili.frm和bilibili.ibd文件,我们不知道表结构,但是我们想要恢复数据。
简略步骤
-
建立一个数据库
-
恢复表结构,并建表。
-
恢复数据
- 解除.frm文件和生成的.ibd文件的关联
- 重启数据库
- 将需要恢复的.ibd文件覆盖原有的.ibd文件。(覆盖说明应该是同名)
- 讲表和和生成的.ibd文件的关联
- 数据恢复。
详细步骤:
-
为了恢复表结构(知道表结构直接跳到第5步),我们需要下载mysql-utilities-1.6.5。地址:https://downloads.mysql.com/archives/utilities/
-
直接双击安装上述软件安装包安装。
-
运行该软件。
-
恢复表结构 。执行语句 mysqlfrm --diagnostic 路径/xxx.frm 路径就是文件位置
- 比如我们执行 mysqlfrm --diagnostic 路径/bilibili.frm 就能得到建表语句,删除语句中涉及到的文件路径。
-
至此,我们已经恢复了表结构,开始恢复数据。
恢复数据下面几步:
- 执行建表语句,建表。
- 会发现数据库安装目录下data/数据库名/下面生成了一个文件bilibili001546.ibd文件(假设是这个文件名)
- 恢复表数据需要首先将原先的.ibd文件与原先的.frm文件解除绑定,具体就是在控制台执行下面命令:
- use databasename(数据库名) 比如:use hehe;
- alter table tablename(表名) discard tablespace; 比如 alter table bilibili discard tablespace;
- 接着执行net stop mysql停掉服务,将需要恢复的bilibili.ibd文件覆盖这个新建的hehe数据库的bilibili表的物理文件bilibili001546.ibd(记得一定要改成对应的名字,比如这里就不是bilibili.ibd,而是bilibili001546.ibd),执行net start mysql开启服务。
- 将复制过来的****.ibd文件与***.frm文件发生联系。具体执行下面命令:
alter table tablename(表名) import tablespace; - 数据恢复成功。
注意点:
- 你想要恢复的表名要和你之前的表名一样,一般来讲,.frm文件的名字就是表名。
- 恢复表结构时得到了建表语句,记得语句中的路径,同时执行建表后,会在你的数据库安装目标 的data/数据库名/下生成一个.ibd文件,将需要恢复的.ibd文件覆盖掉这个文件,可能名字不一样,一定要改成生成的.ibd文件的名字!!!!!一定要改成生成的.ibd文件的名字!!!!!一定要改成生成的.ibd文件的名字!!!!!因为是覆盖,而不是删除再复制进去!!!