如何从 .myd、.myi、.frm 文件中恢复 MySQL 数据库
Posted
技术标签:
【中文标题】如何从 .myd、.myi、.frm 文件中恢复 MySQL 数据库【英文标题】:How to recover MySQL database from .myd, .myi, .frm files 【发布时间】:2010-10-27 02:56:45 【问题描述】:如何从.myd
、.myi
、.frm
文件恢复我的 mysql 数据库之一?
【问题讨论】:
虽然我回答了这个问题,但它确实属于Serverfault。 @chandrajeet 你真的应该接受投票最多的答案。 嘿chandrajeet,你为什么不接受derobert的回答?我确认它也适用于我。不适合你吗? ***.com/help/someone-answers 【参考方案1】:如果这些是 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 表中添加适当的条目,这真的可行吗?我的意思是 MySQL 需要知道查找这些文件对吗? information_schema 表实际上并不存在,它们只是内部数据库状态的视图。见dev.mysql.com/doc/refman/5.0/en/information-schema.html 哇,我感觉很脏,但是将整个目录从我认为是 MySQL4 安装的目录中删除到我的 MySQL5.1 中,只是神奇地重新创建了表。没有重启或任何东西(在 Windows 上)。 它工作你只需要记住运行(对于每个表):check table sometable;
然后运行修复(仅在需要时):repair table sometable;
这很棒!我已将文件放置到位,但 mysql 并没有“看到”它们,直到我将所有权更改为“mysql:mysql”。【参考方案2】:
请注意,如果您要重建 MYI 文件,那么 REPAIR TABLE 的正确用法是:
修复表某个表 USE_FRM;
否则你可能会得到另一个错误。
【讨论】:
【参考方案3】:我刚刚发现了解决方案。我在 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 文件。
【讨论】:
按照这些步骤(在其他一切都失败之后)并使用innodb_force_recovery = 4
级别(不确定在这种情况下是否需要)。谢天谢地!
仅供参考:ibdata1
是 InnoDB,而不是 MyISAM。【参考方案4】:
简单!创建一个虚拟数据库(比如 abc)
将所有这些.myd、.myi、.frm 文件复制到mysql\data\abc,其中mysql\data\ 是所有数据库的.myd、.myi、.frm 的存储位置。
然后去 phpMyadmin,去 db abc 你找到你的数据库。
【讨论】:
最短准确的答案 恢复数据的最佳方式...我安装了WAMP,然后新建了一个数据库,将文件复制到新的数据库目录C:\WAMP64\bin\mysql\mysqlxx\data\newdatabase open phpmyadmin 和你的新数据库,你会看到数据 是的,我在 XAMPP 中也使用过这种方式。安装 XAMPP,创建新的同名空数据库,将这些文件复制到数据库文件夹(frm、myd、ibdata...)。然后在 localhost 上启动 PhpMyAdmin,列出数据库并导出转储文件。并在实时服务器上导入。就像一个魅力一样工作。【参考方案5】:需要注意的一点:
.FRM 文件中包含您的表结构,并且特定于您的 MySQL 版本。
.MYD 文件不是特定于版本的,至少不是次要版本。
.MYI 文件是特定的,但可以省略并使用REPAIR TABLE
重新生成,就像其他答案所说的那样。
这个答案的重点是让您知道,如果您有表的模式转储,那么您可以使用它来生成表结构,然后用您的备份替换那些 .MYD 文件,删除 MYI 文件,并修复它们。通过这种方式,您可以将备份恢复到另一个 MySQL 版本,或者完全移动您的数据库,而无需使用 mysqldump
。我发现这在移动大型数据库时非常有用。
【讨论】:
【参考方案6】:我找到了将文件转换为.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 将其导入到另一台服务器,方法是创建一个新数据库并在导航栏中按“导入”,然后按照步骤导入它
【讨论】:
此解决方案在 Windows 中运行良好,谢谢。【参考方案7】:我认为.myi你可以从mysql内部修复。
如果您从 MySQL 中看到这些类型的错误消息: 数据库无法执行查询(查询)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 |
+------------------+-------+----------+----------+
【讨论】:
【参考方案8】:您可以将文件复制到数据文件夹的适当命名的子目录目录中,只要它与 mySQL 的版本完全相同,并且您在该目录中保留了所有相关文件。如果您没有所有文件,我很确定您会遇到问题。
【讨论】:
如果我没有完全相同版本的 MySQL,我该怎么办?【参考方案9】:http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
它说要重命名 ib_* 文件。我已经完成了,它还给了我数据库。
【讨论】:
【参考方案10】:以上描述不足以让事情为我工作(可能是密集或懒惰),所以一旦我找到了对我未来有帮助的答案,我就创建了这个脚本。希望对其他人有所帮助
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;
【讨论】:
【参考方案11】:对于那些安装了 Windows XP 并安装了 MySQL 服务器 5.5 - 数据库的位置是 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\data,除非您在MySql Workbench 安装界面。
【讨论】:
问题是关于从特定文件类型中恢复,而不是在 Windows XP MySQL 5.5 上可以找到这些文件的位置。以上是关于如何从 .myd、.myi、.frm 文件中恢复 MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章
用(*.frm *.MYD *.MYI)文件恢复MySql数据库
使用(*.frm *.MYD *.MYI)文件恢复MySql数据库
mysql中的data下的数据文件(.FRM.MYD.MYI)恢复为数据