通过.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)

大家都在看

  • 如何基于LSM-tree架构实现一写多读

    PolarDB是阿里巴巴自研的新一代云原生关系型数据库,在存储计算分离架构下,利用了软硬件结合的优势,为用户提供具备极致弹性、海量存储、高性能、低成本的数据库服务。X-Engine…

    数据库 2023年5月24日
    082
  • SNMP基础简介

    近来,公司产品开发涉及到SNMP方面的知识, 在此作一些总结,或许对您现在或者将来有用。 在目前越来越复杂的网络环境中,整个环境有各种各样的网络设备,为了能更好的对这些设备进行管理…

    数据库 2023年6月11日
    091
  • 猴子吃桃(递归)

    递归案例实践分析 猴子偷桃 题目描述: 猴子第一天摘下若干桃子,当即吃了一半,觉得好吃不过瘾,于是又多吃了一个,,第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个…

    数据库 2023年6月16日
    0163
  • 实时流计算—数据采集工具Flume

    Flume最早是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。 Flume特性 1.提供上下文路由特征 2.Flume的管道是基于事务,保证…

    数据库 2023年6月6日
    0273
  • 3000帧动画图解MySQL为什么需要binlog、redo log和undo log

    全文建立在MySQL的存储引擎为InnoDB的基础上 先看一条SQL如何入库的: 这是一条很简单的更新SQL,从MySQL服务端接收到SQL到落盘,先后经过了MySQL Serve…

    数据库 2023年6月16日
    0124
  • maven项目编译报错处理

    1、问题一: [ERROR] Failed to execute goal on project data-common:Could not resolve dependencie…

    数据库 2023年6月11日
    098
  • 23种设计模式之分类总结

    关于设计模式的学习要告一段落了,学习的这一路上,也收到了不少小伙伴的留言,以及点赞给了我莫大的鼓励,我在这里谢谢大家的鼓励。。。 我会再接再厉,嘿嘿。。。 以上的话虽是真心话,但是…

    数据库 2023年6月6日
    0283
  • 使用MobaXterm发布服务器项目文件

    注:笔记旨在记录 一、使用MobaXterm登录服务器 二、后端发布 三、前端发布 一、使用MobaXterm登录服务器 打开MobaXterm,点击左上角Session->…

    数据库 2023年6月16日
    0115
  • EasyExcel导入导出excel工具类

    easyexcel依赖 com.alibaba easyexcel 1.1.2-beat1 工具类 package com.example.demo.files; import c…

    数据库 2023年6月11日
    0113
  • 2022春秋杯春季赛勇者山峰-misc

    这几天搞完取证就开始弄这些个东西,属实把我整麻了,临场我就整不出来,可能是功利心太重了 ,一着急就啥也不会,毕竟这misc只是用来辅助锻炼我的取证的。。 tiger 1.These…

    数据库 2023年6月11日
    0107
  • MyBatis-Plus 实现数据库字段更新为 NULL

    feeMapper.update(Wrappers.lambdaUpdate() .eq(FeePO::getId, feeDO.getId()) .set(ObjectUtils…

    数据库 2023年5月24日
    077
  • Java开源博客系统AngelBlog发布

    一、Java开源博客系统(AngelBlog)系统简介 Angel工作室AngelBlog系统是基于Java Spring boot +前端bootstrap+jquery+lay…

    数据库 2023年6月14日
    081
  • mysql 事务 隔离性 锁

    1、四大特性 1.1 原子性(Atomicity) 事务是一个不可分割的最小工作单元。事务是一个不可分割的最小工作单元。 [En] A transaction is an indi…

    数据库 2023年5月24日
    079
  • 牛客SQL刷题第三趴——SQL必知必会

    【问题】编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回在描述中以先后顺序同时出现 toy 和 carrots …

    数据库 2023年5月24日
    078
  • docker的相关命令

    docker的相关命令 1.安装docker: (1)yum -y install docker ​ sudo sh get-docker.sh 2.从远程拉取应用的镜像源: do…

    数据库 2023年6月16日
    082
  • go context详解

    Context通常被称为上下文,在go中,理解为goroutine的运行状态、现场,存在上下层goroutine context的传递,上层goroutine会把context传递…

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