从 .ibd、.frm 和 mysqllogbin 文件恢复 MySQL 表

car*_*ent 10 mysql innodb recovery mysql-5.6 mysqlbinlog

出于某种原因,当我尝试打开存储在.frm.ibd文件中的表(无论是在 MySQL 还是 phpmyadmin 上)时,它会给我一个语法错误,或者它说它不存在。

我已经从 .frm 和 .ibd 文件中读取了恢复表?有与此类似的问题,但我不知道如何检查是否innodb_file_per_table已启用,而且我总体上真的很困惑。我还将我的mysql-bin.000002文件的副本转换为txt 文件,因此我看到我的数据库中的数据没有完全丢失。

该数据库是去年创建的。我有 6 个mysql-bin.00000文件,但由于某种原因,.000002它是最大的。现在,我拥有所有数据库的.ibd.frm文件,但我不知道如何将其恢复回 MySQL,或者至少恢复到我可以读取的内容。

我在 Windows 2003 Server 上使用 WampServer 2.4 和 MySQL 5.6.12。另外,我应该在 InnoDB 中下载插件吗?

car*_*ent 22

我终于通过大量的反复试验找出并解决了我的问题。对于那些没有原始 ibdata1 文件而只有 .frm 和 .ibd 文件的人,这里是我恢复数据的方法。

  1. 在 -> http://dev.mysql.com/downloads/utilities下载并安装 MySQL 实用程序。
  2. 进入您的命令/终端以打开 MySQL 实用程序 mysqlfrm,并使用它来查找您需要恢复的表的结构。我是怎么做到的,我是 cd 到 mysqlfrm 的文件位置,然后输入“mysqlfrm --server=user:pwd@localhost --port=3307 "path_to_.frm_file" > table_name.txt”。如果您没有指定要将其存放在何处,那么 .txt 文件应保存在与保存实用程序相同的文件夹中。
  3. 在文本文件中,您将看到 CREATE TABLE 语句,其中包括表的所有列和信息(基本上是原始结构)。复制包含所有信息的 CREATE 语句。
  4. 在您的 MySQL 命令中,创建一个新数据库 (CREATE DATABASE database_name)。使其与原始数据库名称相同。
  5. 在新数据库中创建一个新表——它不必与文件夹同名。您可以在命令提示符中创建新表,但我在 PhpMyAdmin 中创建了我的表,这是一个免费的软件工具,可通过 Web 处理 MySQL 的管理。我只需单击 PhpMyAdmin 上的数据库,然后单击 SQL 表,然后粘贴#3 中的表结构。(附带说明,如果我在命令提示符中将表命名为“table”,我总是会收到错误消息,因此请尽量避免使用该名称)。
  6. 在您的 MySQL 命令中,进入您的数据库,然后输入“ALTER TABLE table_name DISCARD TABLESPACE”,这将基本上删除此表的 .ibd 文件。
  7. 将原始表(要恢复的表)的 .ibd 文件复制到新创建的表中,以替换刚刚删除的 .ibd 文件。将您的初始 .ibd 文件更改为新创建的表的名称。这将模仿您刚刚删除的旧 .ibd 文件。您可以在计算机上新创建的数据库文件夹下的 MySQL 数据文件夹中找到此文件夹。
  8. 返回您的 MySQL 命令,进入您的数据库,然后输入“ALTER TABLE table_Name IMPORT TABLESPACE”。您将收到“警告”(1) 错误类型声明,但请忽略它。
  9. 并做了!如果您尝试访问新表,它应该包含旧表中的所有数据。

我希望这会有所帮助,如果您有任何问题或意见,请告诉我!另外,请查看http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file了解其他详细信息。