如何通过frm和ibd文件恢复MySQL数据库-保姆级教程!
如何通过frm文件和ibd文件恢复MySQL数据库表内的内容?
首先先情景说明一下,本教程仅适用于innod引擎的数据库,在使用本教程恢复数据库的前提是你的数据库frm文件和ibd文件全部导出,且没有损坏。
数据无价,还是建议各位勤备份的好。
准备工作
我们首先需要先在服务器上部署好MySQL数据库环境,部署的MySQL数据库版本最好和之前的数据库版本相同,如果数据库版本不同我也无法保证会不会出现一些未知的错误。
我使用的是宝塔面板,所以接下来我将用宝塔给大家演示。(主要是宝塔对不会Linux的人来说比较友好。)
数据库恢复的原理
1.获取frm文件的表结构(create table)
2.将原数据库的ibd文件替换新创建的ibd文件
获取table的方法,即获取表结构的方法
我这里推荐大家使用dbsake,这个工具非常好用。
curl -s get.dbsake.net > dbsake
输入上面这条命令即可下载dbsake工具,一般工具会安装到root目录下。
然后运行chmod u+x dbsake
给dbsake权限。
最后运行这个命令即可获取表结构
1 | ./dbsake frmdump [frm-file-path] |
运行效果如上。
下面的
CREATE TABLE text (
name int(255) NOT NULL COMMENT '繁花教程测试数据库',
123 int(122) NOT NULL COMMENT '繁花教程',
id int(40) NOT NULL COMMENT '繁花教程',
url int(60) NOT NULL COMMENT '繁花教程'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
部分就是我们要的表结构了。
准备完毕,教程开始!
第一步,我们先新建一个数据库。
这个步骤跳过,宝塔面板新建数据库非常简单。
第二步就是通过ssh连接上服务器后进入mysql
连接上服务器后在控制台输入:
mysql -u root -p
然后再输入你数据库的root密码即可进入mysql数据库的控制台。
然后在mysql命令台输入
use [数据库名称]
即可进入对应的数据库。
我这里新建了个text数据库作为测试。
第三步按照原数据库表结构创建新表
然后我们将之前获取的表结构直接粘贴进去,回车。
提示这个也就算成功了,现在原本空的数据库会出现一个新的表,但是这个表是空的,并没有我们之前数据库的表的内容。
第四步删除新建表的ibd文件
我们接下来需要删除新建表的ibd文件。
alter table 表名称 discard tablespace;
在mysql控制台输入上面的命令即可。
第五步,上传原数据库的ibd文件到数据库目录下
数据库目录宝塔的一般为
/www/server/data/数据库名称
宝塔在Linux环境下是这个目录。
第六步让上传的ibd文件和frm文件产生关联
我们需要让新上传的ibd文件和frm文件产生关联,否则数据库会报错。
报错效果如下:
我们只需要在控制台输入:
alter table wp_zrz_order import tablespace;
结尾
到这里教程就结束了,因为按照以上的教程数据库的表就可以恢复了!
如果出现了其他的报错可以尝试修改ibd文件的作者为mysql。
chown -R mysql.mysql wp_zrz_order.ibd
用上面这个命令就可以了。
感谢你看完了这篇教程,最后祝你好运!
如果这个教程真的帮助到了你,你是否能请我喝瓶可乐呢?(下面有打赏按钮哦,疯狂暗示,嘿嘿。)
我们下期教程再见!
对了,如果你要修复的表比较多,我这里给你个批量获取表结构的命令。
find 文件目录 -type f -name “*.frm” -exec ./dbsake frmdump {} ;
示例如下:
find /www/sql/wpqingjuacg/ -type f -name “*.frm” -exec ./dbsake frmdump {} ;
补充
带MYD和MYI文件的表你只需要通过表结构创建好新表之后,在数据库目录下删除新建的MYD和MYI文件,然后将原数据库的MYD和MYI文件上传即可。