MySQL通过.frm与.ibd文件对表结构和数据进行恢复(Windows环境)
通过.frm文件和.ibd文件对MySQL数据库表结构和表数据进行恢复(Windows环境)
·
一、背景
1.1、问题来源
找了个开源项目,发现没有sql文件,只有.frm文件和.ibd文件,想要通过这些文件恢复数据库表结构以及数据。
1.2、环境介绍
数据库版本:MySQL 5.7
数据库表引擎:innodb
二、解决方案
2.1、准备工作
- 进行数据恢复的表.frm和.ibd文件
![]()
- 新创建一个数据库db_demo

2.2、表结构恢复
- 创建一个相同名字的表user,字段随意
CREATE TABLE `user` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 关掉MySQL服务
net stop mysql
- 把准备的user.frm文件复制到MySQL的data/db_demo文件夹,并覆盖原来的.frm文件

- 启动MySQL服务
net start mysql
- 在sql窗口执行语句
FLUSH TABLES;
SHOW CREATE TABLE `user`;

- 找到MySQL的错误日志
SHOW VARIABLES LIKE 'log_error';

- 打开错误日志

- 从错误日志可以看出,user表有6个字段,删除user表,再重新创建,随意新增6个字段
DROP TABLE `user`;
CREATE TABLE `user` (
`1` varchar(255) DEFAULT NULL,
`2` varchar(255) DEFAULT NULL,
`3` varchar(255) DEFAULT NULL,
`4` varchar(255) DEFAULT NULL,
`5` varchar(255) DEFAULT NULL,
`6` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 重复前面的2-4步骤,即可得到user表原来的结构

2.3、表数据恢复
- 删除user表重建
DROP TABLE `user`;
CREATE TABLE `user` (
`userID` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`nickname` varchar(50) DEFAULT NULL,
`userLevel` varchar(50) DEFAULT NULL,
`erollTime` datetime DEFAULT NULL,
`accountBalance` decimal(10,2) DEFAULT NULL,
PRIMARY KEY (`userID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 关掉MySQL服务
net stop mysql
- 把准备的user.ibd文件复制到MySQL的data/db_demo文件夹,并覆盖原来的.ibd文件

- 启动MySQL服务
net start mysql
- 执行语句,恢复成功
ALTER TABLE `user` IMPORT TABLESPACE;
SELECT * FROM `user`;

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)