mysql 5.6 通过.frm和.ibd恢复数据

当MySQL因服务器故障无法启动,ibdata1文件损坏时,可通过创建新库、表并利用.frm和.ibd文件恢复数据。文章详细介绍了从备份中恢复InnoDB表数据的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

突然某种原因,比如服务器断电等,再重启mysql,发现无法重启,报错1067.

[ERROR] InnoDB: File (unknown): 'read' returned OS error 101. Cannot continue operation

从data目录的**.err日志看了半天看不出任何线索。

根据网上各种办法,尝试始终无法正常启动mysql,基本认定是ibdata1文件损坏。

然后只能通过.frm和.ibd恢复表数据了。

首先我们要知道:

a .frm存放数据库的表结构

b.ibd存放数据内容

c.这个是对innodb的数据恢复。myisam不需要这么麻烦,只要数据文件存在直接复制过去就可以。


数据恢复:

1:创建数据库(创建一个新库)

2:创建需要恢复的表(在新库中创建要恢复的表,如果你不知道表结构,通过.frm文件也可以搞出来结构)

CREATE TABLE `log_pbetebs_order` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `WORKORDERID` int(11) DEFAULT NULL COMMENT '工单标识',
  `OPERATESTATE` varchar(100) DEFAULT NULL COMMENT '处理状态',
  `LASTTRACE` varchar(100) DEFAULT NULL COMMENT '处理跟踪',
  `BOOKDATE` datetime DEFAULT NULL COMMENT '预约安装时间',
  `PROBLEMTYPE` varchar(300) DEFAULT NULL COMMENT '问题类别',
  `OPERATERESULT` varchar(100) DEFAULT NULL COMMENT '操作结果',
  `REMARK` varchar(3000) DEFAULT NULL COMMENT '备注',
  `USERNAME` varchar(100) DEFAULT NULL COMMENT '操作人员',
  `CREATETIME` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '工单操作时间',
  PRIMARY KEY (`ID`),
  KEY `WORKORDERID` (`WORKORDERID`)
) ENGINE=InnoDB AUTO_INCREMENT=254483 DEFAULT CHARSET=utf8;

这样就会在对应的数据库下产生.frm和.ibd文件

请注意创建表时候的字段和需要被恢复的表的一致

3:执行

ALTER TABLE 表名字 DISCARD TABLESPACE;       --卸载表空间

这时候数据库文件下面的 xxxx.ibd 文件就会消失

4:将备份的xxxx.ibd放到刚才消失的位置( mysql安装目录/data/数据库名称/ )

5:修改权限,所有者mysql,权限660 (若是windows系统,则不需要执行)

6:执行

ALTER TABLE 表名字 IMPORT TABLESPACE;         --加载表空间

恭喜你,到此就已经恢复成功了!

有些需要注意的地方:

1. 要严格安装上面的步骤来,不能直接覆盖

2. 本地操作的mysql与待恢复的mysql保持版本一直

本文主要参考https://blog.youkuaiyun.com/qq_41116956/article/details/82996319,经尝试完全可用。

感谢网友的分享,希望此文也能帮助到正处于焦虑而一筹莫展的朋友!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值