如何从 .myd
、.myi
和 .frm
文件中恢复我的一个 MySQL 数据库?
/var/lib/mysql/dbname
)将使该表可用。它不必与它们来自的相同数据库,相同服务器,相同MySQL版本或相同体系结构。您还可能需要更改文件夹的所有权(例如,chown -R mysql:mysql /var/lib/mysql/dbname
)。GRANT
等)是mysql
数据库的一部分。因此,它们不会随着表一起恢复;您可能需要运行适当的GRANT
语句来创建用户、授予权限等。(可以恢复mysql
数据库,但您需要小心MySQL版本和任何必要运行的mysql_upgrade
实用程序。)check table sometable;
然后运行修复命令(只有在必要时):repair table sometable;
- Nux请注意,如果您想重建MYI文件,则正确使用REPAIR TABLE的方法是:
REPAIR TABLE sometable USE_FRM;
否则,您很可能会遇到另一个错误。
我刚刚发现了这个解决方案。我正在使用Windows 7上的MySQL 5.1或5.6。
无需为此恢复查找.MYI和.MYD文件。
innodb_force_recovery = 4
级别(不确定在这种情况下是否需要)。谢天谢地! - Joshua Stewardson简单!创建一个虚拟数据库(比如说abc)
将所有的.myd、.myi和.frm文件复制到mysql\data\abc目录下。其中mysql\data\是存放所有数据库的.myd、.myi和.frm文件的地方。
然后打开phpMyadmin,在数据库abc中找到你的数据库。
需要注意的一点是:
.FRM文件中包含了表结构,而且它只适用于你所使用的MySQL版本。
.MYD文件并不依赖版本号,至少对于不同的小版本来说是不依赖的。
.MYI文件则是与特定版本相关联的,但是可以像其他答案所说的那样省略并使用REPAIR TABLE
重新生成。
这个答案的重点是让您知道,如果您拥有表的模式转储,则可以使用它来生成表结构,然后将这些.MYD文件替换为备份文件,删除MYI文件,并对它们进行修复。通过这种方式,您可以将备份还原到另一个MySQL版本,或者移动整个数据库而无需使用mysqldump
。我发现这在移动大型数据库时非常有帮助。
我找到了一种解决方案,可以将文件转换为.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
文件。然后会弹出窗口询问在哪里保存文件
就这样!现在您(应该)有一个包含最初的.myd
,.myi
和.frm
文件的.sql
文件。然后可以通过创建新数据库并按照导航栏中的“导入”按钮,然后按照导入步骤将其导入到另一个服务器上的phpMyAdmin中导入它。
我认为你可以在mysql内部进行修复myi文件。
如果你看到这些来自MySQL的错误消息: Database failed to execute query (query) 1016: Can't open file: 'sometable.MYI'. (errno: 145) Error Msg: 1034: Incorrect key file for table: 'sometable'. Try to repair it 那么你可能有一个崩溃或损坏的表。
你可以像这样从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 |
+------------------+-------+----------+----------+
以上描述对我来说不足以让事情顺利进行(可能是因为我太愚钝或懒惰了),所以我在找到答案后创建了这个脚本,希望能帮助我将来的工作。希望它也能帮助其他人。
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;
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
它建议重命名ib_*文件,我已经这样做了,成功找回了数据库。