如何从.MYD,.MYI,.FRM文件恢复MySQL数据库

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

350336 次浏览

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

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

我认为.myi可以从MySQL内部进行修复。

如果您在MySQL中看到以下类型的错误消息: 数据库无法执行查询(query)1016:无法打开文件:“ sometable.myi ”。(错误编号:145) 错误消息:1034:表“ sometable ”的密钥文件不正确。试着修复它。 那么B您可能有一个崩溃或损坏的表。

您可以从如下所示的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 |
+------------------+-------+----------+----------+

有一件事要注意:

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

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

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

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

请注意,如果您想重建MYI文件,那么修复表的正确用法是:

修理台SomeTable使用_FRM;

否则,您可能只会得到另一个错误。

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

它说要重命名IB_*文件。我已经做了,它把DB还给了我。

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

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

然后转到phpMyAdmin,转到DB ABC,找到您的数据库。

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

我刚刚发现了这个问题的解决方案。我在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 ”的DataFolder
  4. 从要恢复的文件中粘贴IBDATA1包含.frm的数据库的文件夹文件。
  5. 启动MySQL实例。

无需为此恢复查找.myi和.myd文件。

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

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;

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