一尘不染

从 .frm 和 .ibd 文件恢复表?

mysql

我之前保存了 /var/lib/mysql/ddms 目录的副本(“ddms”是模式名称)。现在我通过运行在新安装的 Ubuntu 10.04.3 LTS 上安装了一个新的 MySQL apt-get install mysql-server,我相信已经安装了 5.1 版。在我复制 /var/lib/mysql 下的 ddms 目录后,它的一些表工作正常,这些表具有一组关联的三个文件:一个 .frm 文件、一个 .MYD 文件和一个 .MYI 文件。

但是,有两个表具有不同的文件集:一个 .frm 文件和一个 .ibd 文件。这两个表没有出现在 phpMyAdmin 的表列表中。当我查看错误日志时,它说:

[ERROR] Cannot find or open table ddms/dictionary_item from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.

请帮助恢复这两个表。谢谢。


阅读 74

收藏
2022-10-19

共1个答案

一尘不染

InnoDB 表不能像 MyISAM 表一样被复制。

只是将 .frm 和 .ibd 文件从一个位置复制到另一个位置是自找麻烦。*仅当且仅当您可以保证 .ibd 文件的表空间 id 与 ibdata1 文件的元数据中的表空间 id 条目完全匹配时,*复制 InnoDB 表的 .frm 和 .ibd 文件才有效。

这是关于如何在表空间 id 不匹配的情况下将任何 .ibd 文件重新附加到 ibdata1 的绝佳链接:http: //www.chriscalender.com/ ?tag=innodb-error-tablespace-id-in-file 。阅读本文后,您应该立即意识到复制 .ibd 文件简直是疯了。

您可以应用 Chris Calendar 链接中的建议,或者您可以回到 mysql 的旧安装,启动 mysql,然后 mysqldumpddms数据库。然后,将该 mysqldump 导入新的 mysql 实例。相信我,这会容易得多。

2022-10-19