如何从.myd,.myi,.frm文件恢复MySQL数据库
如何从.myd
, .myi
, .frm
文件恢复我的一个MySQL数据库?
如果这些是MyISAM表,那么将.FRM,.MYD和.MYI文件放入数据库目录(例如/var/lib/mysql/dbname
)将使该表可用。 它不一定是来自同一个数据库,相同的服务器,相同的MySQL版本,或相同的体系结构。 您可能还需要更改文件夹的所有权(例如, chown -R mysql:mysql /var/lib/mysql/dbname
)
请注意,权限( GRANT
等)是mysql
数据库的一部分。 所以他们不会随着桌子的恢复。 您可能需要运行适当的GRANT
语句来创build用户,授予访问权限等(可以恢复mysql
数据库,但是您需要小心MySQL版本以及mysql_upgrade
实用程序的任何所需的运行。
实际上,您可能只需要.FRM(表结构)和.MYD(表数据),但您必须修复表以重build.MYI(索引)。
唯一的限制是,如果你降级,你最好检查发行说明(可能运行修复表)。 当然,较新的MySQL版本增加了function。
[虽然很明显,如果你混合和匹配表,这些表之间关系的完整性是你的问题; MySQL不会在意,但你的应用程序和你的用户可能会。 另外,这个方法根本不适用于InnoDB表。 只有MyISAM,但考虑到你有的文件,你有MyISAM]
请注意,如果您要重buildMYI文件,那么正确使用REPAIR TABLE是:
REPAIR TABLE sometable 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实例。
无需为此恢复find.MYI和.MYD文件。
有一件事要注意:
.FRM文件具有您的表格结构,并且特定于您的MySQL版本。
.MYD文件不是特定于版本的,至less不是次要版本。
.MYI文件是特定的,但可以像其他答案所说的那样,用REPAIR TABLE
排除并重新生成。
这个答案的关键是让你知道,如果你有一个表的模式转储,那么你可以使用它来生成表结构,然后用你的备份replace这些.MYD文件,删除MYI文件并修复它们所有。 这样,您可以将备份恢复到另一个MySQL版本,或者在不使用mysqldump
情况下完全移动数据库。 移动大型数据库时,我发现这非常有用。
简单! 创build一个虚拟数据库(比如abc)
将所有这些.myd,.myi,.frm文件复制到mysql \ data \ abc,其中mysql \ data \是存储所有数据库的.myd,.myi,.frm的地方。
然后去phpMyadmin,去数据库abc,你会发现你的数据库。
我想.myi你可以从MySQL里面修复。
如果您看到这些types的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 | +------------------+-------+----------+----------+
您可以将这些文件复制到数据文件夹的相应命名的子目录中,只要它是与mySQL完全相同的版本,并且保留了该目录中的所有关联文件即可。 如果你没有所有的文件,我敢肯定你会遇到问题。
我find了一个将文件转换为.sql
文件(然后可以将.sql
文件导入到服务器并恢复数据库)的解决scheme,无需访问/var
目录,因此您不需要成为服务器pipe理员要做到这一点。
它确实需要在您的计算机上安装XAMPP或MAMP。
- 安装好XAMPP之后,导航到安装目录(通常是
C:\XAMPP
)和子目录mysql\data
。 完整path应该是C:\XAMPP\mysql\data
-
在里面你会看到你创build的任何其他数据库的文件夹。 复制并粘贴
.myd
,.myi
和.frm
文件的文件夹到那里。 该文件夹的path应该是C:\XAMPP\mysql\data\foldername\.mydfiles
-
然后在浏览器中访问
localhost/phpmyadmin
。 select刚刚粘贴到mysql\data
文件夹中的数据库,然后点击导航栏中的导出。 select将其导出为.sql
文件。 它会popup询问保存文件的位置
就是这样! 您(应该)现在有一个.sql
文件,其中包含最初是.myd
, .myi
和.frm
文件的数据库。 然后,您可以通过phpMyAdmin将其导入到另一台服务器,方法是创build一个新数据库并在导航栏中按“导入”,然后按照步骤导入
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
它说要重命名ib_ *文件。 我已经做了,它给了我的数据库。
上面的描述不足以让事情为我工作(可能是密集或懒惰),所以我创build了这个脚本,一旦我find答案,以帮助我在未来。 希望它可以帮助别人
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安装中更改了位置GUI。