概述
今天主要做个实验,当某张数据库表.frm文件被删除后,只剩下.ibd文件,应该如何去恢复呢?
一、环境模拟
1、环境准备
create database test;use test;CREATE TABLE `t` ( `id` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into t values(1),(2),(3);
![da39bca989cfb2cd647f97663f66b90f.png](https://img-blog.csdnimg.cn/img_convert/da39bca989cfb2cd647f97663f66b90f.png)
2、手动删除.frm文件
rm -rf t.frm
![a9cdb5646f0f551e33b33c096c1afbd5.png](https://img-blog.csdnimg.cn/img_convert/a9cdb5646f0f551e33b33c096c1afbd5.png)
二、在不重启数据库情况下恢复
1、在另一个数据库实例新建相同表结构的表
use sys;CREATE TABLE `t` ( `id` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
![74fa4885d2f484ae1dd1afea20cab469.png](https://img-blog.csdnimg.cn/img_convert/74fa4885d2f484ae1dd1afea20cab469.png)
2、把新库的.ibd文件迁移到源库下
cp -a ../sys/t.frm .
![c6898682e435dddc42673756c2635a12.png](https://img-blog.csdnimg.cn/img_convert/c6898682e435dddc42673756c2635a12.png)
3、查看数据
![23a3ab8c1a9d59556c9607d4a7a9055b.png](https://img-blog.csdnimg.cn/img_convert/23a3ab8c1a9d59556c9607d4a7a9055b.png)
三、重启数据库情况下
1、重启数据库
systemctl restart mysqld
![1bd07c14801b9092b976170c28115b1b.png](https://img-blog.csdnimg.cn/img_convert/1bd07c14801b9092b976170c28115b1b.png)
2、在另一个数据库实例新建相同表结构的表
use mysql;CREATE TABLE `t` ( `id` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
![0182f22ba639977dbefc3521008c49af.png](https://img-blog.csdnimg.cn/img_convert/0182f22ba639977dbefc3521008c49af.png)
3、把新库的.ibd文件迁移到源库下后测试
cp -a ../mysql/t.frm .
![27da48de6232c138fd2f976516d86212.png](https://img-blog.csdnimg.cn/img_convert/27da48de6232c138fd2f976516d86212.png)
可以发现已恢复数据。
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
![58c7517a64ad4c30b758576aba01fb6c.gif](https://img-blog.csdnimg.cn/img_convert/58c7517a64ad4c30b758576aba01fb6c.gif)