从 .frm 文件恢复 mysql 数据库

Posted

技术标签:

【中文标题】从 .frm 文件恢复 mysql 数据库【英文标题】:Restore the mysql database from .frm files 【发布时间】:2012-06-11 16:20:07 【问题描述】:

我每周都会转储所有表格以获取备份。但后来我明白它只是存储表的 .frm 文件。它没有显示表格的 .MYD 和 .MYI 文件。所以我只有我的.frm 数据库文件,而且我的数据库也是innodb。那么我可以用数据库中的数据获取我的数据库吗?

【问题讨论】:

你是怎么转储的?如果你使用了mysqldump,那么你应该得到可以用来恢复数据或表结构或两者的sql语句,除非你只dump了表结构,在这种情况下你只能恢复表结构。 【参考方案1】:

是的,这是可能的。仅将.frm 文件复制到数据库文件夹是不够的,还需要将ib_logfilesibdata 文件复制到数据文件夹中。我刚刚复制了.frm 文件并复制了这些文件,然后重新启动服务器并恢复了我的数据库。

复制以上文件后执行以下命令-

sudo chown -R mysql:mysql /var/lib/mysql

上述命令会将mysql下的文件所有者及其文件夹更改为MySql用户。这对于 mysql 读取 .frmibdata 文件很重要。

【讨论】:

如果我将三个旧数据库转移到一个已经很少数据库的数据库怎么办? 能否有人通过此线程提供对上述后续评论的答案,该评论于 2014 年 7 月 26 日 8:22 发布? TIA。 @user359187 如果phpmyadmin版本改变会怎样? @user359187 - 你是男人,它帮助并节省了很多时间 如果你有一个新的数据库怎么办。如果我们覆盖了 ibdata,我们就覆盖了新的数据库。这个怎么卖?【参考方案2】:

可能对某人有用:

我只能在灾难后恢复frm文件,至少我可以通过执行以下操作从frm文件中获取表结构:

1- 在新的 mysql 数据库中创建一些具有至少一列和相同名称的虚拟表和 frm 文件。

2-停止mysql服务

3- 将旧的 frm 文件复制并粘贴到新创建的表的 frm 文件中,它应该会询问您是否要覆盖每个文件。全部替换。

4-启动mysql服务,你的表结构...

问候。 任何朋友

【讨论】:

亲爱的匿名用户,你今天救了我的命!它对我很有用!仅仅复制 .frm 文件确实不够。 对我不起作用。表不存在错误。虽然我可以看到列。 有什么方法可以从 .frm 文件中恢复表的数据? 我有同样的问题。我也想只从 .frm 文件中恢复。有什么办法吗? 我解释的步骤可以帮助您从 .frm 文件中恢复“表结构”,正如 user359187 回答的那样,您也需要一些额外的文件来恢复数据。【参考方案3】:

我也在这里回答了这个问题:https://dba.stackexchange.com/a/42932/24122

我最近遇到了同样的问题。我使用的是 Mac,因此我使用 MAMP 将数据库恢复到可以将其导出到 MySQL 转储中的位置。

您可以在此处阅读完整的博客文章:http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac

你必须有:

-ibdata1

-ib_logfile0

-ib_logfile1

-.FRM 来自 mysql_database 文件夹的文件

-您愿意销毁的 MAMP / MAMP Pro 的全新安装(如果需要)

    通过 SSH 连接到您的 Web 服务器(开发、生产,没有区别)并浏览到您的 mysql 文件夹(我的文件夹位于 /var/lib/mysql 以在 Linux 上安装 Plesk) 压缩mysql文件夹 下载 mysql 文件夹的存档,该文件夹应包含所有 mySQL 数据库,无论是 MyISAM 还是 innoDB(如果需要,您可以 scp 此文件,或将其移动到可下载的目录) 安装 MAMP(Mac、Apache、MySQL、PHP) 浏览到 /Applications/MAMP/db/mysql/ 将 /Applications/MAMP/db/mysql 备份到 zip 存档(以防万一)

    从生产服务器(在我的情况下为 mt Plesk 环境)复制包含在 mysql 文件夹存档中的所有文件夹和文件,除非不要覆盖:

    -/Applications/MAMP/db/mysql/mysql/

    -/Applications/MAMP/db/mysql/mysql_upgrade_info

    -/Applications/MAMP/db/mysql/performance_schema

    瞧,您现在应该可以从 phpMyAdmin 访问数据库了,真是如释重负!

但我们还没有完成,您现在需要执行 mysqldump 以将这些文件恢复到您的生产环境,并且 phpmyadmin 界面对于大型数据库会超时。 请按照此处的步骤操作:

http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/

复制如下以供参考。请注意,在默认的 MAMP 安装中,密码是“root”。

如何使用终端为 MAMP 运行 mysqldump

从 MAMP[1] 导出数据库

第一步: 打开一个新的终端窗口

第二步: 通过在终端中输入以下行导航到 MAMP 安装 cd /应用程序/MAMP/库/bin 按回车键

第三步: 编写转储命令 ./mysqldump -u [用户名] -p [DATA_BASENAME] > [PATH_TO_FILE] 按回车键

例子:

./mysqldump -u root -p wp_database > /Applications/MAMP/htdocs/symposium10_wp/wp_db_onezero.sql

快速提示:要快速导航到文件夹,您可以将文件夹拖到终端窗口中,它将写入文件夹的位置。有人向我展示了这个,那真是美好的一天。

第四步: 这行文本应该会在您按 Enter 后出现 输入密码: 所以你猜怎么着,输入你的密码,记住字母不会出现,但它们就在那里 按回车键

第五步: 检查您存储文件的位置,如果它在那里,成功 现在可以导入数据库了,接下来会介绍。

现在您已经导出了 mysql 数据库,您可以在生产环境中导入它。

【讨论】:

【参考方案4】:

我使用了mysqlfrm,这是一个很棒的工具,可以从 .frm 文件生成表创建 sql 代码。尽管列出了表,但我收到了这个讨厌的表未找到错误。因此我使用这个工具来重新生成表格。在 ubuntu 中,您需要将其安装为:

sudo apt install mysql-utilities

那么,

mysqlfrm --diagnostic mysql/db_name/ > db_name.sql

新建一个数据库然后就可以使用了,

mysql -u username -p < db_name.sql

但是,这将为您提供表格而不是数据。就我而言,这就足够了。

【讨论】:

这只会给你表格而不给你数据?【参考方案5】:

是的!有可能

方法很长,但您只需使用 .frm 文件即可获取所有数据。当然,还需要mysql/data目录下的其他文件。

我的问题

有一天我的硬盘崩溃并出现启动蓝屏错误。我尝试连接多台机器,但没有成功。由于这是一个引导错误,我担心这些文件。我尝试使用辅助硬盘并尝试恢复文件夹和文件。我还备份了完整的xampp文件夹c:/xampp以防万一,因为我没有最近的数据库,我真的很担心如何检索数据库。我们在数据库中有很多客户项目管理和个人文档。

*** 评论中列出的所有方法都不起作用,至少对我来说是这样。我花了整整 2 天的时间在谷歌上搜索从.frm 文件中获取数据的答案。遇到了许多人的多种方法,但一切都令人沮丧,并且在实施时遇到了一些错误。如果他们中的大多数人都能正常工作(根据他们的评论),那么我错过了什么。

因为我太绝望了,我什至重新安装了 Windows,结果丢失了我所有的软件并再次尝试。但还是同样的错误

感谢达斯汀·戴维斯

我在他的博客中找到了解决方案,并设法让它完全按照他的方式工作。让我把功劳归功于这个人,达斯汀戴维斯 (https://dustindavis.me/restoring-mysql-innodb-files-on-windows/)。您可以从这里跳转到他的博客并尝试他的方法,非常清晰易懂。

但是我在尝试他的方法时发现了一些他没有在他的博客中解释的东西,我会尽力解释我是如何做到的以及你需要寻找什么。

完全按照这个来

重要提示:确保安装相同版本的 XAMPP。您不能从旧 XAMPP 复制粘贴到新版本。这将导致__config__tracking 错误。

如何检查您的 XAMPP 版本

    转到您的 xampp 文件夹(您已备份 xampp)。 打开readme_en.txt 文件。它位于 xampp 的根目录中。 您应该会在顶部看到版本。 ###### ApacheFriends XAMPP Version X.X.XX ######

文件需要恢复

xampp(old folder)/mysql/data/

ibdata1
ib_logfile0
ib_logfile1
<databasename>/*.frm
<databasename>/*.ibd

步骤 1

    安装相同版本的 xampp 后。 不要启动 apache 或 myql

第二步

转到mysql/data 文件夹并替换 ibdata1ib_logfile0ib_logfile1 现在将您的 database 文件夹从旧 xampp 备份复制粘贴到新安装的 xampp 文件夹 c:/xampp/mysql/data/,其中包含 .frm.ibd 文件,如果您不确定尝试使用一个数据库。

第三步

转到c:/xampp/mysql/bin 并查找my.cn。 打开my.cn 文件并查找#skip-innodb,然后在该行下查找innodb_log_file_size=5M 将其更改为170Minnodb_log_file_size=170M。这是您的日志文件大小,如果您不确定,只需将其设置为 170

第四步

现在打开c:/xampp/ 目录中的文件mysql_start.bat(Windows 批处理文件)。

... --console之后添加–innodb_force_recovery=6

 ....

 mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console -–innodb_force_recovery=6
 if errorlevel 1 goto error
 goto finish

第 5 步

现在启动您的 Apache 和 Mysql。 转到您的PHPMyAdmin 并检查您的数据库及其表。如果您没有遇到任何错误,那么您就在正确的轨道上。 停止 Apache 和 Mysql,然后复制粘贴其余数据库。

【讨论】:

【参考方案6】:

我只是将数据库文件夹复制粘贴到 MySQL 中的数据文件夹中,即如果您有一个名为 alto 的数据库,则在您的 MySQL 中找到文件夹 alto -> 备份中的数据文件夹,然后复制整个 alto 文件夹并将其粘贴到新文件夹中安装 MySQL -> 数据文件夹,重新启动 MySQL 即可完美运行。

【讨论】:

重启是这里的关键——很好! 确保先停止MYSQL。【参考方案7】:

复制所有文件并替换到 /var/lib/mysql , 之后您必须将文件的所有者更改为mysql 如果 mariadb.service 重启失败,这一点非常重要

chown -R mysql:mysql /var/lib/mysql/*

chmod -R 700 /var/lib/mysql/*

【讨论】:

【参考方案8】:

经过多次试验和错误,我能够根据 user359187 的回答和 this 博客文章来完成这项工作。

为了在复制文件并分配 MySQL 所有权后将我的旧 .frm.ibd 转移到新的 MySQL 数据库,我的关键是登录 MySQL 并连接到新数据库,然后让 MySQL 做通过导入表空间来工作。

mysql> connect test;
mysql> ALTER TABLE t1 IMPORT TABLESPACE;

这将使用复制的.frm.ibd 文件导入数据。

我必须为每个表单独运行 Alter 命令,但这有效,我能够恢复表和数据。

【讨论】:

【参考方案9】:

在启动之前,您应该停止 WAMP 服务,或者至少在提示启动服务时重新启动它们。

在旧服务器实例上,默认导航到 MySQL 数据文件夹,该文件夹应类似于 C:\wamp\bin\mysql\mysql5.1.53\data\,其中 mysql5.1.53 将是先前安装的 MySQL 数据库的版本号。

在此文件夹中,您应该会看到一些文件和文件夹。这些文件夹是实际的 MySQL 数据库,包含一堆我们需要的 .frm 文件。您应该将文件夹名称识别为数据库名称。这些文件夹及其所有内容可以直接复制到你的 MySQL 数据文件夹中,你可以忽略默认数据库 mysql、performance_schema、test。

如果您现在启动服务器,您将看到数据库被拾取,但是数据库将不包含复制的任何表。为了获取数据库的内容,回到数据文件夹中,您应该会看到一个文件ibdata1,这是表格的数据文件,将其直接复制到数据文件夹中,您应该已经有一个文件您的新数据文件夹名为“ibdata1”,因此您可能希望在从旧的 MySQL 数据文件夹复制 ibdata1 之前将其重命名为 ibdata1.bak

完成后重新启动所有 WAMP 服务。您可以使用 PhpMyAdmin 来检查您的数据库是否已成功恢复。

【讨论】:

【参考方案10】:

创建一个同名的新数据库 将 .frm .ibd 文件复制到 xampp/mysql/data/[databasename]/

您还需要 ibdata 文件 在里面找到

xampp/mysql/data/ 复制之前的ibdata1文件 粘贴在粘贴文件中并用现有的ibdata文件替换它

[注意:您可能会丢失在新 ibdata 文件中新创建的数据库内容]

【讨论】:

以上是关于从 .frm 文件恢复 mysql 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何从 .myd、.myi、.frm 文件中恢复 MySQL 数据库

如何从ibd文件中恢复数据

如何从ibd文件中恢复数据

MySQL InnoDB 数据库使用 .frm 文件和 ibdata 文件恢复

如何 根据ibdata和frm文件 恢复数据库

如何使用frm和ibd文件恢复mysql数据库