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

cha*_*eet 178 mysql recovery

如何恢复从我的MySQL数据库的一个.myd,.myi,.frm文件?

der*_*ert 167

如果这些是MyISAM表,那么将.FRM,.MYD和.MYI文件放入数据库目录(例如/var/lib/mysql/dbname)中将使该表可用.它不必是与它们相同的数据库,相同的服务器,相同的MySQL版本或相同的体系结构.您可能还需要更改文件夹的所有权(例如chown -R mysql:mysql /var/lib/mysql/dbname)

请注意,权限(GRANT等)是mysql数据库的一部分.所以他们不会随桌子一起恢复; 您可能需要运行相应的GRANT语句来创建用户,授予访问权限等.(可以恢复mysql数据库,但是您需要小心MySQL版本和任何所需的mysql_upgrade实用程序运行.)

实际上,您可能只需要.FRM(表结构)和.MYD(表数据),但您必须修复表以重建.MYI(索引).

唯一的限制是,如果你降级,你最好检查发行说明(并可能运行修复表).当然,较新的MySQL版本会增加功能.

[虽然很明显,如果你混合和匹配表格,那么这些表格之间关系的完整性就是你的问题; MySQL不关心,但您的应用程序和您的用户可能会.此外,此方法对InnoDB表完全不起作用.只有MyISAM,但考虑到你拥有的文件,你有MyISAM]

  • information_schema表实际上并不存在,它们只是内部数据库状态的视图.请参阅http://dev.mysql.com/doc/refman/5.0/en/information-schema.html (4认同)
  • 哇,我觉得很脏,但是将整个目录从我认为的MySQL4安装放到我的MySQL5.1中只是神奇地重新创建了表格.没有重启或任何东西(在Windows上). (4认同)
  • 它只需要记住运行(对于每个表):`check table sometable;`然后运行修复(仅在需要时):`repair table sometable;` (4认同)
  • 这很棒!我把文件放到位,但是直到我将所有权改为"mysql:mysql"之后,mysql才"看到"它们. (3认同)

小智 24

请注意,如果要重建MYI文件,则正确使用REPAIR TABLE是:

修理表可用USE_FRM;

否则你可能会得到另一个错误.


小智 22

我刚刚发现了解决方案.我在Windows 7上使用MySQL 5.1或5.6.

  1. 从位于"C:\ Program Data\MySQL\MSQLServer5.1\Data"上的旧文件中复制.frm文件和ibdata1
  2. 停止当前SQL实例中的SQL Server实例
  3. 转到位于"C:\ Program Data\MySQL\MSQLServer5.1\Data"的数据文件夹
  4. 粘贴ibdata1数据库文件夹,其中包含要恢复的文件中的.frm文件.
  5. 启动MySQL实例.

无需为此恢复找到.MYI和.MYD文件.

  • 仅供参考:`ibdata1`是InnoDB,而不是MyISAM. (6认同)

Bre*_*ent 14

有一点需要注意:

.FRM文件中包含您的表结构,并且特定于您的MySQL版本.

.MYD文件并非特定于版本,至少不是次要版本.

.MYI文件是特定的,但可以REPAIR TABLE像其他答案一样被遗漏和重新生成.

这个答案的要点是让你知道如果你有一个表的模式转储,那么你可以使用它来生成表结构,然后用备份替换那些.MYD文件,删除MYI文件,并修复它们所有.这样,您可以将备份还原到另一个MySQL版本,或者完全移动数据库而不使用mysqldump.移动大型数据库时,我发现这非常有用.


小智 12

简单!创建一个虚拟数据库(比如说abc)

将所有这些.myd,.myi,.frm文件复制到mysql\data\abc,其中mysql\data \是存储所有数据库的.myd,.myi,.frm的地方.

然后转到phpMyadmin,转到db abc并找到您的数据库.


Elz*_*ugi 7

我想.myi你可以从mysql里面修复.

如果您从MySQL看到这些类型的错误消息:数据库无法执行查询(查询)1016:无法打开文件:'sometable.MYI'.(错误:145)错误消息:1034:表的密钥文件不正确:'sometable'.尝试修复它然后你可能有一个崩溃或损坏的表.

您可以从mysql提示符检查并修复表,如下所示:

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+
Run Code Online (Sandbox Code Playgroud)

现在你的桌子应该没问题:

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
Run Code Online (Sandbox Code Playgroud)


cgp*_*cgp 5

您可以将文件复制到数据文件夹的相应命名的子目录目录中,只要它是完全相同的mySQL版本并且您保留了该目录中的所有相关文件.如果您没有所有文件,我很确定您会遇到问题.


Kas*_*Lee 5

我找到了一种将文件转换为文件的解决方案.sql(然后您可以将.sql文件导入服务器并恢复数据库),而无需访问/var目录,因此您也无需成为服务器管理员即可执行此操作。

它确实需要在计算机上安装XAMPP或MAMP。

  • 安装XAMPP之后,导航至安装目录(通常C:\XAMPP)和子目录mysql\data。完整路径应为C:\XAMPP\mysql\data
  • 在内部,您将看到您创建的任何其他数据库的文件夹。复制和文件夹充分贴合.myd.myi并且.frm文件到那里。该文件夹的路径应为

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • 然后localhost/phpmyadmin在浏览器中访问。选择您刚刚粘贴到该mysql\data文件夹中的数据库,然后在导航栏中单击“导出”。选择将其导出为.sql文件。然后它将弹出,询问将文件保存在何处

就是这样!你(应该)现在有一个.sql包含原本的数据库文件.myd.myi并且.frm文件。然后,您可以通过以下方式通过phpMyAdmin将其导入到另一台服务器:创建一个新数据库并在导航栏中按“导入”,然后按照以下步骤将其导入