如何从.myd
, .myi
,.frm
文件中恢复我的 MySQL 数据库之一?
11 回答
如果这些是 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 文件,则正确使用 REPAIR TABLE 是:
修复表某个表 USE_FRM;
否则你可能会得到另一个错误。
我刚刚发现解决这个问题。我在 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 文件。
简单的!创建一个虚拟数据库(比如 abc)
将所有这些 .myd、.myi、.frm 文件复制到 mysql\data\abc,其中 mysql\data\ 是存储所有数据库的 .myd、.myi、.frm 的位置。
然后去 phpMyadmin,去 db abc 你找到你的数据库。
需要注意的一件事:
.FRM 文件中包含您的表结构,并且特定于您的 MySQL 版本。
.MYD 文件不是特定于版本的,至少不是次要版本。
REPAIR TABLE
.MYI 文件是特定的,但可以像其他答案所说的那样被忽略并重新生成。
这个答案的重点是让您知道,如果您有表的模式转储,那么您可以使用它来生成表结构,然后用您的备份替换那些 .MYD 文件,删除 MYI 文件并修复它们全部。这样,您可以将备份恢复到另一个 MySQL 版本,或者完全移动您的数据库而不使用mysqldump
. 我发现这在移动大型数据库时非常有用。
我找到了将文件转换为文件的解决方案.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 将其导入到另一台服务器,方法是创建一个新数据库并在导航栏中按“导入”,然后按照步骤导入它
我认为 .myi 你可以从 mysql 内部修复。
如果您从 MySQL 中看到这些类型的错误消息: Database failed to execute query (query) 1016: Can't open file: 'sometable.MYI'。(errno: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 |
+------------------+-------+----------+----------+
您可以将文件复制到数据文件夹的适当命名的子目录目录中,只要它与 mySQL 的版本完全相同,并且您保留了该目录中的所有关联文件。如果您没有所有文件,我很确定您会遇到问题。
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
它说要重命名 ib_* 文件。我已经做到了,它还给了我数据库。
上面的描述不足以让事情对我有用(可能是密集的或懒惰的),所以一旦我找到了将来可以帮助我的答案,我就创建了这个脚本。希望它可以帮助别人
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;
对于那些安装了 Windows XP 并安装了 MySQL 服务器 5.5 - 数据库的位置是 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\data,除非您在 MySql Workbench 安装中更改了位置图形用户界面。