【问题标题】:Restoring MySQL Databases when reinstalling Wamp重新安装 Wamp 时恢复 MySQL 数据库
【发布时间】:2014-08-03 00:40:56
【问题描述】:

我正在尝试将我的旧数据库恢复到新的 Wamp 安装。但是,在执行此操作之前,我没有备份 Mysql 文件。谢天谢地,卸载并没有删除所有文件,但在我的数据文件夹中我有:

1) 所有数据库(作为文件夹)

2) auto.cnf

旧文件夹中没有 ib* 文件。是否仍然可以以某种方式恢复我的数据库?

我已尝试替换整个 mysql5.6.17 文件夹(安装之间没有更改版本),但 Wamp 仍然是橙色并且永远不会变成绿色。

如果我只替换数据文件夹,MySQL 服务启动,我可以看到数据库,但看不到表。

如果我将 my.ini 中的路径更改为指向旧 wamp 的数据文件夹,我根本看不到旧数据库。

编辑: 进行了一些试验,将 database 文件夹直接复制到新 Wamp 的 data 文件夹中可以让我获得所有表正确,但表中没有实际数据,尝试使用 MySQLWorkbench 查询它会给我错误:

Error Code: 1146. Table 'testdb.users' doesn't exist

编辑 2:在我的数据文件夹的错误日志文件中找到这个:

2014-08-03 06:24:46 25164 [Warning] InnoDB: Cannot open table testdb/users from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.

正如我所想,这是 InnoDB 自身映射的问题。有没有办法手动解决这个问题?

【问题讨论】:

    标签: mysql wamp innodb wampserver


    【解决方案1】:

    如果您创建了一个 INNODB 数据库,并且没有进行其他配置更改以将实际数据存储在单独的表空间中,那么该 INNODB 数据库的所有实际数据都将存储在 \wamp\bin\mysql\mysql5.6.17\ibdata1 文件中。

    如果您没有旧安装的那个文件,那么您的数据就会丢失。

    \wamp\bin\mysql\mysql5.6.17\data\DATA_BASE_NAME\ 文件夹中也会有信息,数据库中的每个表都有一个 .frm 文件,但这基本上只是架构信息,而不是实际数据。

    供日后参考,InnoDB Backup and Recovery

    【讨论】:

    • 啊不,我没有那个文件。所以我猜当时没有办法恢复它。好的,谢谢,我猜!至少我知道我现在需要努力重建它。干杯!
    • 我将所有数据库移动到新位置(MacPorts 到 Homebrew 设置)并且无法连接。阅读 MySQL Bench 日志并看到 InnoDB: Cannot open table _users from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem. 。意识到这是一个 InnoDB 问题,在找到这个线程后意识到我没有复制 ibdata1。没有像我认为的那样会引起问题。移动了它,MySQL 恢复了它,现在我可以再次加载旧数据库。
    • 有时会说:pffewwwwwwwww 说的就是这个
    【解决方案2】:

    黄金法则:

    在重大更改之前始终备份数据库(来自 phpmyadmin).. 最好花 1 分钟时间,而不是遇到麻烦..

    如何复制data文件夹

    如果要复制数据库,则 INSTALLATION/mysql 版本应该相同..然后将新安装的data文件夹重命名为data_my_old,所以现在你可以将备份的data文件夹(应该包含ibdata1 文件)。

    【讨论】:

      【解决方案3】:

      取决于 innodb_file_per_table 设置。

      如果它关闭,那么您的所有表都在 ibdata1 中。现在您有了全新的 ibdata1(因为您看到错误“无法从内部数据字典中打开表 testdb/users”,这意味着 InnoDB 运行全新的字典)。这意味着现在数据在磁盘上的某个位置。恢复非常困难,需要大量繁琐的工作。您需要拍摄磁盘的图像,使用 stream_parser 扫描它以找到 InnoDB 页面,然后恢复 InnoDB 字典,然后找到每个表的 index_id,如果 stream_parser 找到该索引,则运行 c_parser 从索引中提取记录。

      如果 innodb_file_per_table 为 ON 并且您确实在数据库目录中看到了 .ibd 文件,那么恢复会容易得多。首先,您可以尝试使用 ibdconnect 重新连接单个 ibd 文件,或者使用 stream_parser/c_parser 从 ibd 文件中提取记录。

      提到的工具是TwinDB data recovery toolkit的一部分

      【讨论】:

      • 根本没有ib文件!我看到的只是模式和auto.cnf 文件:(
      【解决方案4】:

      我刚刚做了一个谷歌搜索,发现了这个....

      转到 C:\wamp\bin\mysql\mysql5.5.24\data

      找到一个名为“mysql-bin.index”的文件

      将该文件重命名为“mysql-bin.index-corrupt”

      重新启动服务器,它会正常工作,您的所有数据库都将在您离开它们的地方。

      【讨论】:

      • 如果我还没有尝试在谷歌上找到的所有内容,我就不会在这里发布问题。我的数据文件夹中没有此文件
      • 那里没有这样的文件。列表在这里:auto.cnf、ibdata1、ib_buffer_pool、ib_logfile0、ib_logfile1、pcmata.err
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 2013-03-27
      • 1970-01-01
      • 2016-09-01
      • 2012-05-12
      • 2014-03-26
      相关资源
      最近更新 更多