从.frm文件恢复mysql数据库

时间:2012-06-07 15:18:32

标签: mysql mysqldump

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

10 个答案:

答案 0 :(得分:73)

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

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

  

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

上面的命令会将mysql下的文件所有者和它的文件夹更改为MySql用户。对于mysql来说,阅读.frmibdata文件非常重要。

答案 1 :(得分:18)

可能对某人有用:

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

1-在新的mysql数据库中创建一些带有至少一列的虚拟表和带有frm文件的SAME NAME。

2站mysql服务

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

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

问候。 anybudy

答案 2 :(得分:7)

我在这里回答了这个问题: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

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

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

  1. SSH进入您的Web服务器(开发,生产,没有区别)并浏览到您的mysql文件夹(我的是/ var / lib / mysql,用于Linux上的Plesk安装)
  2. 压缩mysql文件夹
  3. 下载mysql文件夹的存档,该文件夹应包含所有mySQL数据库,无论是MyISAM还是innoDB(您可以scp此文件,或者将其移至可下载目录,如果需要)
  4. 安装MAMP(Mac,Apache,MySQL,PHP)
  5. 浏览/ Applications / MAMP / db / mysql /
  6. 备份/应用程序/ MAMP / db / mysql到zip存档(以防万一)
  7. 从生产服务器复制mysql文件夹存档中包含的所有文件夹和文件(在我的情况下为mt Plesk环境)除了不要覆盖:

    - /应用程序/ MAMP /分贝/ MySQL的/ MySQL的/

    - /应用程序/ MAMP /分贝/ MySQL的/ mysql_upgrade_info

    - /应用程序/ MAMP /分贝/ MySQL的/ performance_schema

  8. 瞧,你现在应该可以从phpMyAdmin访问数据库,真是一种解脱!

  9. 但是我们还没有完成,你现在需要执行一个mysqldump才能将这些文件恢复到你的生产环境,并且phpmyadmin接口会超时用于大型数据库。 请按照此处的步骤操作:

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

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

    如何使用终端

    为MAMP运行mysqldump

    来自MAMP的出口数据库[1]

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

    第二步: 通过在终端中输入以下行导航到MAMP安装     cd / applications / MAMP / library / bin 点击回车键

    第三步: 编写dump命令     ./mysqldump -u [USERNAME] -p [DATA_BASENAME]> [文件路径] 点击回车键

    示例:

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

    快速提示:要快速导航到文件夹,您可以将文件夹拖到终端窗口,它将写入文件夹的位置。这是一个很棒的一天,有人告诉我这件事。

    第四步: 点击回车后应出现这行文字 输入密码: 所以猜猜看,键入你的密码,记住这些字母不会出现,但它们就在那里 点击回车键

    第五步: 检查存储文件的位置,如果存在,SUCCESS 现在您可以导入数据库了,这将在下面概述。

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

答案 3 :(得分:7)

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

sudo apt install mysql-utilities

然后,

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

创建一个新数据库然后你可以使用

mysql -u username -p < db_name.sql

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

答案 4 :(得分:3)

我只是将数据库文件夹粘贴到MySQL中的数据文件夹中,即如果你有一个名为alto的数据库,那么在你的MySQL中找到文件夹alto - &gt;备份中的数据文件夹并复制整个alto文件夹并将其传递给新安装的MySQL - &gt;数据文件夹,重启MySQL,这很完美。

答案 5 :(得分:2)

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

  

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

  

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

答案 6 :(得分:2)

经过反复试验,我能够基于user359187答案和this博客文章来使此工作正常。

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

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

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

我必须分别为每个表运行Alter命令,但这可以正常工作,并且我能够恢复表和数据。

答案 7 :(得分:0)

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

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

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

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

完成此操作后重新启动所有WAMP服务。您可以使用PhpMyAdmin检查数据库是否已成功还原。

答案 8 :(得分:0)

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

你也需要ibdata文件 在

中找到

<强> XAMPP / MySQL的/数据/ 复制以前的ibdata1文件 粘贴粘贴文件并将其替换为现有的ibdata文件

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

答案 9 :(得分:0)

是!有可能

很长的方法,但是您仅使用.frm文件就可以获取所有数据。当然,您需要mysql/data目录中的其他文件。

我的问题

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

stackoverflow注释上列出的方法均不起作用,至少对我而言。我花了整整2天的时间来寻找答案,以从.frm文件中获取数据。遇到了来自许多人的多种方法,但是在执行过程中,一切都令人沮丧,并遇到了一些错误。如果他们大多数都能正常工作(基于他们的评论),那么我会缺少什么。

因为我是如此绝望,所以我什至重新安装了Windows,这导致我的所有软件丢失并再次尝试。但仍然是相同的错误

感谢达斯汀·戴维斯

我在他的博客中找到了解决方案,我设法使其工作原理与他完全相同。让我赞扬这个人达斯汀·戴维斯(https://dustindavis.me/restoring-mysql-innodb-files-on-windows/)。您可以从这里跳到他的博客,然后尝试他的方法,方法非常清楚并且易于遵循。

但是我尝试使用他的方法时发现了一些他在博客中未曾解释过的东西,我将尽力解释我的工作方式和需要寻找的东西。

严格按照此操作

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

如何检查XAMPP版本

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

文件需要还原

xampp(old folder)/mysql/data/

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

步骤1

  1. 安装相同版本的xampp之后。
  2. 请勿启动apache或myql

步骤2

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

步骤3

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

步骤4

  • 现在打开mysql_start.bat目录中的文件c:/xampp/(Windows批处理文件)。
  • –innodb_force_recovery=6之后添加... --console

    ....
    
    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 ,然后复制粘贴其余数据库。