如何从.myd
,.myi
,.frm
个文件恢复我的一个MySQL数据库?
答案 0 :(得分:164)
如果这些是MyISAM表,那么将.FRM,.MYD和.MYI文件放入数据库目录(例如/var/lib/mysql/dbname
)将使该表可用。它不必是与它们相同的数据库,相同的服务器,相同的MySQL版本或相同的体系结构。您可能还需要更改文件夹的所有权(例如chown -R mysql:mysql /var/lib/mysql/dbname
)
请注意,权限(GRANT
等)是mysql
数据库的一部分。所以他们不会随桌子一起恢复;您可能需要运行相应的GRANT
语句来创建用户,提供访问权限等。(可以恢复mysql
数据库,但是您需要小心MySQL版本以及{的任何所需运行{1}}实用程序。)
实际上,您可能只需要.FRM(表结构)和.MYD(表数据),但您必须修复表以重建.MYI(索引)。
唯一的限制是,如果你要降级,你最好查看发行说明(并可能运行修复表)。当然,较新的MySQL版本会添加功能。
[虽然很明显,如果你混合和匹配表格,这些表格之间关系的完整性就是你的问题; MySQL不关心,但您的应用程序和您的用户可能会。此外,此方法对InnoDB表完全不起作用。只有MyISAM,但考虑到你拥有的文件,你有MyISAM]
答案 1 :(得分:23)
请注意,如果要重建MYI文件,则正确使用REPAIR TABLE为:
REPAIR TABLE sometable USE_FRM;
否则你可能会收到另一个错误。
答案 2 :(得分:22)
我刚刚发现解决方案。我在Windows 7上使用MySQL 5.1或5.6。
无需为此恢复找到.MYI和.MYD文件。
答案 3 :(得分:13)
有一点需要注意:
.FRM文件中包含您的表结构,并且特定于您的MySQL版本。
.MYD文件并非特定于版本,至少不是次要版本。
.MYI文件是特定的,但可以省略并使用REPAIR TABLE
重新生成,就像其他答案一样。
这个答案的目的是让你知道如果你有一个表的模式转储,那么你可以用它来生成表结构,然后用你的备份替换那些.MYD文件,删除MYI文件,并修复它们。这样,您可以将备份还原到另一个MySQL版本,或者在不使用mysqldump
的情况下完全移动数据库。移动大型数据库时,我发现这非常有用。
答案 4 :(得分:12)
简单!创建一个虚拟数据库(比如abc)
将所有这些.myd,.myi,.frm文件复制到mysql \ data \ abc,其中mysql \ data \是存储所有数据库的.myd,.myi,.frm的地方。
然后转到phpMyadmin,转到db abc,找到你的数据库。
答案 5 :(得分: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 |
+------------------+--------+----------+----------+
现在你的桌子应该没问题了:
check table sometable;
+------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
答案 6 :(得分:5)
您可以将文件复制到数据文件夹的相应名称的子目录目录中,只要它与mySQL的EXACT版本完全相同,并且您已保留该目录中的所有相关文件。如果您没有所有文件,我很确定您会遇到问题。
答案 7 :(得分:4)
我找到了将文件转换为.sql
文件的解决方案(然后您可以将.sql
文件导入服务器并恢复数据库),而无需访问/var
目录,因此您也不需要成为服务器管理员来执行此操作。
它确实需要在您的计算机上安装XAMPP或MAMP。
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将其导入另一台服务器,方法是创建一个新数据库并按“导入”按钮。在导航栏中,然后按照导入步骤
答案 8 :(得分:2)
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
它说要重命名ib_ *文件。我已经做到了,它让我回到了数据库。
答案 9 :(得分: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;
答案 10 :(得分:-2)
对于那些安装了Windows XP且安装了MySQL服务器5.5的用户 - 数据库的位置是C:\ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data,除非你改变了位置MySql Workbench安装GUI。