2008-09-22 106 views
9

我必须恢复已经无意中在MySQL 5.0下降的数据库。从检查备份文件,我似乎只有.FRM文件来保存数据库数据。的MySQL的InnoDB数据库恢复

任何人都可以建议是否这是我需要从备份执行数据库还原/导入,还是有其他文件,我应该必须手来完成此?

回答

14

.FRM文件不是数据文件,他们只是存储“数据字典”(见MySQL manual)。 InnoDB将其数据存储在ib_logfile *文件中。这就是你需要做的备份/恢复。欲了解更多详情,请参阅here

+0

InnoDB的要求ibdata,ib_logfile *,和/或*的.ibd文件除了* .FRM文件。 – silfreed 2010-05-17 18:59:09

+0

如果只有ib_logfile *和.frm文件(以及一个月前的备份),该怎么办?在这种情况下恢复的任何机会?还是你需要ibdata来恢复任何东西? – eglasius 2010-09-03 21:10:39

6

哦,我......你就麻烦了。关闭数据库。备份innodb文件。在删除数据库之后,请求你没有做任何事情。

在Percona的家伙(包括MySQL性能优化博客的作者),应该能够帮助你:Percona emergency support

如果你创业你自己,借此与大家:Data Recovery Toolkit for Innodb

它的物流?你必须阅读每一页(Innodb的情况下,计算机术语页面... 16k块),并以这种方式重新构建你的数据。这是非常低级的工作(我们正在讨论如何打开你的十六进制编辑器,如果工具包没有为你做这个工作,就开始计算字节数),如果你不是一个经验丰富的程序员,你将会受到伤害。

7

恢复InnoDB的: (假设你的数据文件夹是C:\ ProgramData \ MySQL的\ MySQL服务器5.5 \数据)

  1. 复制的数据库要还原的文件夹(数据库名称命名)到C:\ ProgramData \ MySQL \ MySQL Server 5.5 \ data
  2. 将3个ibdata文件复制到数据文件夹ex。 (C:\ ProgramData \ MySQL的\ MySQL服务器5.5 \数据)

    _ib_logfile0 
    _ib_logfile1 
    _ibdata1 
    
  3. 获取MB(它应该是一样_ib_logfile1)的_ib_logfile0按文件的大小右键 - >属性

  4. 编辑MySQL的配置文件(MySQL的\ BIN \ my.ini文件)的innodb_log_file_size = 343M是完全ibdata文件大小

  5. 运行

    的mysqld --defaults文件=的mysql \斌\ my.ini的--standalone --console --innodb_force_recovery = 6

  6. 现在你的数据应重新出现在你的数据库。使用phpmysql或任何其他工具

-2

详细的解决方案,您可以在这里找到它们导出:

http://www.unilogica.com/mysql-innodb-recovery/(在葡萄牙文)

除了innodb_force_recovery的标志,我找到了另一种解决方案: innodb_file_per_table,它在每个文件中拆分InnoDB表,如MyISAM表。

在崩溃恢复中,您可以丢失的数据少于单个文件ibdata1