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

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球