我以前保存了 /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.
Run Code Online (Sandbox Code Playgroud)
请帮助恢复这两个表。谢谢。
Rol*_*DBA 47
InnoDB 表不能像 MyISAM 表一样被复制。
只是将 .frm 和 .ibd 文件从一个位置复制到另一个位置会带来麻烦。复制 InnoDB 表的 .frm 和 .ibd 文件仅当且仅当您可以保证 .ibd 文件的表空间 id 与 ibdata1 文件的元数据中的表空间 id 条目完全匹配时才有效。
我在 DBA StackExchange 中写了两篇关于这个表空间 ID 概念的文章
这是关于如何在表空间 ID 不匹配的情况下将任何 .ibd 文件重新附加到 ibdata1 的优秀链接:http : //www.chriscalender.com/ ? tag=innodb-error-tablespace-id-in-file 。阅读本文后,您应该立即意识到复制 .ibd 文件简直是疯了。
您可以应用 Chris Calendar 链接中的建议,或者您可以返回到 mysql 的旧安装,启动 mysql,然后 mysqldumpddms数据库。然后,将该 mysqldump 导入到您的新 mysql 实例中。相信我,这会容易得多。
小智 22
我最近遇到了同样的问题。这是我用来解决它的步骤,而不必像 RolandoMySQLDBA 上面提到的那样弄乱表空间 ID。我在 Mac 上,所以我使用 MAMP 来将数据库恢复到可以将其导出到 MySQL 转储的点。
您可以在此处阅读有关它的完整博客文章:http : //www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac
你必须有:
-ibdata1
-ib_logfile0
-ib_logfile1
mysql_database 文件夹中的 -.FRM 文件
- 您愿意销毁的 MAMP / MAMP Pro 的全新安装(如果需要)
从生产服务器(在我的情况下为 mt Plesk 环境)复制 mysql 文件夹存档中包含的所有文件夹和文件,除了不要覆盖:
-/应用程序/MAMP/db/mysql/mysql/
-/Applications/MAMP/db/mysql/mysql_upgrade_info
-/Applications/MAMP/db/mysql/performance_schema
瞧,您现在应该可以从 phpMyAdmin 访问数据库了,真是一种解脱!
但是我们还没有完成,您现在需要执行 mysqldump 以将这些文件恢复到您的生产环境,并且 phpmyadmin 界面对于大型数据库会超时。请按照此处的步骤操作:
http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/
复制如下供参考。请注意,在默认 MAMP 安装中,密码为“root”。
从 MAMP 导出数据库 [1]
第一步: 打开一个新的终端窗口
第二步: 通过在终端 cd /applications/MAMP/library/bin 中输入以下行来导航到 MAMP 安装按回车键
第三步: 写转储命令 ./mysqldump -u [USERNAME] -p [DATA_BASENAME] > [PATH_TO_FILE] 按回车键
例子:
./mysqldump -u root -p wp_database > /Applications/MAMP/htdocs/symposium10_wp/wp_db_onezero.sql
Run Code Online (Sandbox Code Playgroud)
快速提示:要快速导航到文件夹,您可以将文件夹拖到终端窗口中,它将写入文件夹的位置。当有人向我展示这个时,这是美好的一天。
第四步: 在你按下回车键后应该会出现这行文字 Enter password: 所以你猜怎么着,输入你的密码,记住字母不会出现,但它们在那里按回车键
第五步: 检查您存储文件的位置,如果在那里,则成功 现在您可以导入数据库,接下来将对其进行概述。
现在您已经导出了 mysql 数据库,您可以将其导入到生产环境中。
小智 18
我已经使用 MySQL Utilites 和 MariaDB 10 恢复了我的 MySQL 5.5 *.ibd 和 *.frm 文件。
1) 生成创建 SQL。
您可以从 frm 文件中获取您的创建 sql。您必须使用:https : //downloads.mysql.com/archives/utilities/shell
> mysqlfrm --server=root:pass@localhost:3306 c:\MY\t1.frm --port=3310
您可能有的其他方式您创建的 sql 的。
2) 创建您
的表在数据库上创建您的表。
3)alter table xxx discard tablespace
放弃你想要替换你的*.ibd 文件的表。
4) 将您的 *.ibd 文件(MySQL 或 MariaDB)复制到 MariaDB 的数据路径
首先我尝试使用 MySQL 5.5 和 5.6 来恢复,但数据库崩溃并立即停止有关表空间 ID 损坏的错误。( ERROR 1030 (HY000): Got error -1 from storage engine )
在我使用 MariaDB 10.1.8 并成功恢复我的数据之后。
5) alter table xxx import tablespace
当您运行此语句时,MariaDB 会警告文件,但它并不比恢复数据重要 :) 数据库仍在继续,您可以看到您的数据。
我希望这些信息对您有所帮助。
| 归档时间: |
|
| 查看次数: |
310750 次 |
| 最近记录: |