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

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

chandrajeet asked 2019-04-18T14:24:29Z

11个解决方案

159 votes

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

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

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

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

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

derobert answered 2019-04-18T14:25:29Z

23 votes

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

修理表可用USE_FRM;

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

mcardellg answered 2019-04-18T14:26:24Z

22 votes

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

从位于“C:\ Program Data \ MySQL \ MSQLServer5.1 \ Data”上的旧文件中复制.frm文件和ibdata1

停止当前SQL实例中的SQL Server实例

转到位于“C:\ Program Data \ MySQL \ MSQLServer5.1 \ Data”的数据文件夹

粘贴ibdata1和数据库的文件夹,其中包含要恢复的文件中的.frm文件。

启动MySQL实例。

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

alnel answered 2019-04-18T14:27:49Z

13 votes

有一点需要注意:

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

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

.MYI文件是特定的,但可以省略并重新生成mysqldump,就像其他答案所说。

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

Brent answered 2019-04-18T14:28:59Z

12 votes

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

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

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

Vishal answered 2019-04-18T14:29:56Z

7 votes

我想.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 |
+------------------+--------+----------+----------+

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

check table sometable;
+------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
Elzo Valugi answered 2019-04-18T14:30:55Z
5 votes

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

cgp answered 2019-04-18T14:31:34Z

4 votes

我找到了将文件转换为.sql文件的解决方案(然后可以将.myd文件导入服务器并恢复数据库),而无需访问.myi目录,因此您无需成为服务器管理员即可无论是。

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

安装XAMPP后,导航到安装目录(通常为.sql),子目录为.myd。完整路径应为.myi

在里面你会看到你创建的任何其他数据库的文件夹。 复制& 将文件夹中的.sql,.myd和.myi文件粘贴到那里。 该文件夹的路径应该是

.sql

然后在浏览器中访问.sql。 选择刚刚粘贴到.myd文件夹中的数据库,然后单击导航栏中的“导出”。 选择将其导出为.myi文件。 然后会弹出询问保存文件的位置

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

Kaspar Lee answered 2019-04-18T14:32:56Z
2 votes
[http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html]

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

James answered 2019-04-18T14:33:33Z
2 votes

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

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;
dny238 answered 2019-04-18T14:34:04Z
-2 votes

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

Demon answered 2019-04-18T14:34:34Z