【发布时间】:2016-06-12 06:58:19
【问题描述】:
是否可以从他们的文件中复制 MySQL 数据库? [我知道 mysqldump 是复制数据库的最佳方法,但这是不可能的,因为我们只有 mysql 文件夹中的备份文件]。
我们有 ibdata1 文件、ib_log* 文件以及我们要从备份文件中恢复的三个 db 的完整目录(文件夹似乎包含所有需要的 frm 和 par 文件)。显然已经尝试将所有文件复制到 /var/lib/mysql 中,尽管看起来结构完好无损,但访问数据的尝试未成功。
即show databases 将显示数据库,use dbname 有效,show tables 正确显示表,但是当尝试从 [any] 表(通过查询)访问数据时,它显示 ERROR 1146 (42S02): Table 'dbname.dbtable' 不存在 - 尽管 mysql 很高兴地向我们展示了当我们展示表格时该表格确实存在。
还应指出在复制文件之前服务已停止,并且所有文件都以 mysql 作为所有者,然后在尝试访问数据之前服务重新启动。
【问题讨论】:
-
您在 MySQL 服务器错误日志中看到任何内容吗? InnoDB 可以相当挑剔从中恢复数据。您至少需要确保服务器配置与 InnoDB 日志文件大小等重要变量相匹配。
-
它给出的错误是:120326 10:07:18 [错误] 尽管表的 .frm 文件存在,但无法从 InnoDB 的内部数据字典中找到或打开表 dbname/tablename。也许您已经删除并重新创建了 InnoDB 数据文件,但忘记删除 InnoDB 表的相应 .frm 文件,或者您已将 .frm 文件移动到另一个数据库?或者,该表包含此版本的引擎不支持的索引。但看起来 Jaydee 提供了一个链接,可以帮助您了解如何恢复。
标签: mysql