190

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

4

11 回答 11

175

如果这些是 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]

于 2009-05-18T19:07:12.257 回答
27

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

修复表某个表 USE_FRM;

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

于 2010-05-21T10:47:08.827 回答
24

我刚刚发现解决这个问题。我在 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 文件。

于 2012-06-27T10:13:36.123 回答
16

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

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

然后去 phpMyadmin,去 db abc 你找到你的数据库。

于 2011-05-25T16:24:10.350 回答
14

需要注意的一件事:

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

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

REPAIR TABLE.MYI 文件是特定的,但可以像其他答案所说的那样被忽略并重新生成。

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

于 2010-04-11T03:58:02.577 回答
11

我找到了将文件转换为文件的解决方案.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 将其导入到另一台服务器,方法是创建一个新数据库并在导航栏中按“导入”,然后按照步骤导入它

于 2016-01-28T09:43:43.050 回答
7

我认为 .myi 你可以从 mysql 内部修复。

如果您从 MySQL 中看到这些类型的错误消息: Database failed to execute query (query) 1016: Can't open file: 'sometable.MYI'。(errno: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 | 
+------------------+--------+----------+----------+

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

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
于 2009-11-08T15:50:17.480 回答
5

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

于 2009-05-18T18:49:15.707 回答
2

http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html

它说要重命名 ib_* 文件。我已经做到了,它还给了我数据库。

于 2010-08-20T20:51:30.940 回答
2

上面的描述不足以让事情对我有用(可能是密集的或懒惰的),所以一旦我找到了将来可以帮助我的答案,我就创建了这个脚本。希望它可以帮助别人

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;
于 2015-01-27T03:51:28.697 回答
-2

对于那些安装了 Windows XP 并安装了 MySQL 服务器 5.5 - 数据库的位置是 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\data,除非您在 MySql Workbench 安装中更改了位置图形用户界面。

于 2012-05-31T11:57:17.903 回答