通过.frm和.idb文件恢复mysql数据库

本文对该文章进行参考,地址https://baijiahao.baidu.com/s?id=1675966756498698574&wfr=spider&for=pc

现在有一个数据库需要恢复,已经获取到.frm和.ibd文件

这些文件即是我之前的文章2021长安杯wp – WXjzc – 博客园 (cnblogs.com)中的第36题的数据库的文件

通过.frm和.idb文件恢复mysql数据库

先将要恢复的数据库的表名全部提取出来 <span class="ne-text">dir /l *.frm /b > filename.txt</span>,去掉后缀即为表名

通过.frm和.idb文件恢复mysql数据库

下载MySQL Utilities用于将frm文件转换成sql文件l https://downloads.mysql.com/archives/utilities/;

通过phpstudy启用mysql服务,引擎一定要选择InnoDB,这个引擎才会生成.frm和.ibd文件

通过.frm和.idb文件恢复mysql数据库

然后编写一个bat文件,批量完成操作,格式为

<span class="ne-text">mysqlfrm --server=&#x7528;&#x6237;&#x540D;:&#x5BC6;&#x7801;@&#x670D;&#x52A1;&#x5668;:&#x7AEF;&#x53E3; &#x6E90;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;\abc.frm > &#x76EE;&#x6807;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;\abc.sql --diagnostic --port=3307 --user=</span>

mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\@6211@7684@8d26@5355.frm > E:\cab\www_honglian7001\sql\@6211@7684@8d26@5355.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_admin.frm > E:\cab\www_honglian7001\sql\app_admin.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_admin_cate.frm > E:\cab\www_honglian7001\sql\app_admin_cate.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_admin_log.frm > E:\cab\www_honglian7001\sql\app_admin_log.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_admin_menu.frm > E:\cab\www_honglian7001\sql\app_admin_menu.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_appconfig.frm > E:\cab\www_honglian7001\sql\app_appconfig.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_article.frm > E:\cab\www_honglian7001\sql\app_article.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_article_cate.frm > E:\cab\www_honglian7001\sql\app_article_cate.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_attachment.frm > E:\cab\www_honglian7001\sql\app_attachment.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_content.frm > E:\cab\www_honglian7001\sql\app_content.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_emailconfig.frm > E:\cab\www_honglian7001\sql\app_emailconfig.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_messages.frm > E:\cab\www_honglian7001\sql\app_messages.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_mobile.frm > E:\cab\www_honglian7001\sql\app_mobile.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_smsconfig.frm > E:\cab\www_honglian7001\sql\app_smsconfig.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_urlconfig.frm > E:\cab\www_honglian7001\sql\app_urlconfig.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_user.frm > E:\cab\www_honglian7001\sql\app_user.sql --diagnostic --port=3307 --user=
mysqlfrm --server=root:root@localhost:3306 E:\cab\www_honglian7001\app_webconfig.frm > E:\cab\www_honglian7001\sql\app_webconfig.sql --diagnostic --port=3307 --user=

通过.frm和.idb文件恢复mysql数据库

打开文件就能发现,这些sql语句完成了表结构的创建

通过.frm和.idb文件恢复mysql数据库

可以将这些sql文件中的语句全部合到同一个文件当中 <span class="ne-text">copy *.sql create.sql</span>

通过.frm和.idb文件恢复mysql数据库

通过.frm和.idb文件恢复mysql数据库

把注释会引起报错的warning删掉

通过.frm和.idb文件恢复mysql数据库

在创建一个同名的数据库 <span class="ne-text">create DATABASE www_honglian7001</span>

通过.frm和.idb文件恢复mysql数据库

将之前处理的sql语句导入并执行

通过.frm和.idb文件恢复mysql数据库

使用命令 <span class="ne-text">alter table 表名 discard tablespace;</span>来删除创建表时生成的.ibd文件,并生成.frm文件,不执行这个命令的话,则只有.ibd文件

通过.frm和.idb文件恢复mysql数据库

mysql的数据目录可以在phpstudy中查看

通过.frm和.idb文件恢复mysql数据库

通过.frm和.idb文件恢复mysql数据库

将要恢复的.ibd文件放入目录下对应的数据库目录中

通过.frm和.idb文件恢复mysql数据库

再使用命令 <span class="ne-text">alter table 表名 import tablespace;</span>实现数据迁移

通过.frm和.idb文件恢复mysql数据库

刷新数据库后,您可以看到数据已恢复。

[En]

After refreshing the database, you can see that the data has been restored.

通过.frm和.idb文件恢复mysql数据库

有一点出现了问题,之前的表名 <span class="ne-text">@6211@7684@8d26@5355</span>,这其实是最初的数据库中的一个中文表名,为 <span class="ne-text">&#x6211;&#x7684;&#x8D26;&#x5355;</span>,但是现在变成了编码形式,以这个形式进行上述操作的时候,生成的.frm文件会变成 <span class="ne-text">@04006211@04007684@04008d26@04005325</span>,从而导致恢复失败,要解决这个问题,只需要将这类文件在一开始就重命名为正常格式即可

重命名后执行操作,数据恢复成功

[En]

The operation is performed after renaming, and the data is recovered successfully

通过.frm和.idb文件恢复mysql数据库

Original: https://www.cnblogs.com/WXjzc/p/16122196.html
Author: WXjzc
Title: 通过.frm和.idb文件恢复mysql数据库

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505490/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 图文实例解析,InnoDB 存储引擎中行锁的三种算法

    前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁。具体来说,InnoDB 采用的是…

    数据库 2023年6月6日
    091
  • MySQL 数据库备份脚本

    MySQL 数据库备份脚本 #!/bin/bash 数据库连接信息 DB_HOST="127.0.0.1" DB_PORT="3306" D…

    数据库 2023年5月24日
    072
  • Golang 接口(interface)

    Go 语言的接口遵守LSP(里氏替换原则),即 一个类型可以自由地被另一个满足相同接口的类型替换。 接口类型具体描述了一系列方法的集合,一个实现了这些方法的具体类型是这个接口类型的…

    数据库 2023年6月16日
    070
  • Array源码刨析

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月16日
    072
  • mybatis缓存

    加上flushCache=”true”后,再次运行结果如下 2.二级缓存 mybatis的二级缓存默认开启,但真正使用需要在mapper文件中添加相应的缓存…

    数据库 2023年6月16日
    079
  • Linux 实用命令

    实用命令: 1、查看端口占用情况 &#x67E5;&#x770B;&#x8BE5;&#x7AEF;&#x53E3;&#x662F;&…

    数据库 2023年6月16日
    064
  • MySQL的Explain总结

    Explain简介 MySQL优化器在基于成本的计算和基于规则的SQL优化会生成一个所谓的 执行计划,我们就可以使用执行计划查看MySQL对该语句具体的执行方式。 介绍这个好啰嗦就…

    数据库 2023年5月24日
    068
  • 汇编语言Assembly Language.asm–8086(持续更新)

    汇编语言Assembly Language.asm–8086 数据转移指令MOV 数据流向图 XCHG OPD,OPS数据交换指令 功能:将源操作数和目的操作数内容互换…

    数据库 2023年6月14日
    068
  • [LeetCode]20. 有效的括号

    给定一个只包括 ‘(‘,’)’,'{‘,’}’,'[‘,’]&#8217…

    数据库 2023年6月9日
    0106
  • Python 学习笔记(七)–socket

    1.网络七层模型及主要协议 2.TCP的”三次握手”和四次挥手 三次握手 Step1:首先客户端向服务器端发送一段TCP报文; Step 2:服务器端接收到…

    数据库 2023年6月16日
    0105
  • Read View的可见性判断理解

    读了 @SnailMann大佬【MySQL笔记】正确的理解MySQL的MVCC及实现原理 收益颇丰,非常感谢! 但对其中如何判断事务是否可见性还是不太理解,于是作了本文,在原博客基…

    数据库 2023年6月16日
    068
  • 基础算法知识

    一、冒泡排序 冒泡排序其实跟握手定理差不多(即A,B,C三人需每两个都都要握手一次 AB,AC,BC) 时间复杂度比较差的O(n²) int[] arrays = {2, 1, 5…

    数据库 2023年6月6日
    0110
  • 动手实验查看MySQL索引的B+树的高度

    一:文中几个概念 h:统称索引的高度;h1:主键索引的高度;h2:辅助索引的高度;k:非叶子节点扇区个数。 二:索引结构 叶子节点其实是双向链表,而叶子节点内的行数据是单向链表,该…

    数据库 2023年6月14日
    089
  • 线上问题检测

    ​ jdk 自带工具 1&#x3001;&#x901A;&#x8FC7;top&#x627E;&#x5230;CPU&#x5360;…

    数据库 2023年6月6日
    087
  • 【黄啊码】MySQL入门—4、掌握这些数据筛选技能比你学python还有用-1

    大家好!我是黄啊码,今天没继续select * 了吧,如果还继续,那接下来的课程先别学,回去好好把之前的课程重复复习一遍,学明白了我们再会?废话不多说,学今天的课程之前我们先来说说…

    数据库 2023年5月24日
    078
  • Guava中这些Map的骚操作,让我的代码量减少了50%

    Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另…

    数据库 2023年6月14日
    075
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球