首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从ibdata恢复数据的丢失的Frm文件

从ibdata恢复数据的丢失的Frm文件
EN

Server Fault用户
提问于 2013-09-05 07:31:16
回答 1查看 2.2K关注 0票数 1

我在使用mysql数据库。当我使用mysqlworkbench时,所有的.frm文件都意外地从mysql数据文件夹中删除,但是数据文件夹中仍然有ibdata文件。我没有使用innodb_file_per_table,这意味着我所有的无害数据库表数据都在一个ibdata文件中。

不幸的是,我没有备份可以恢复。有人能建议我如何从ibdata文件中恢复数据吗?

EN

回答 1

Server Fault用户

发布于 2013-09-05 19:56:34

你的问题似乎与这个堆叠溢出。相同

我在此转载了部分已被接受的答复。

简单的解决方案是找到保存的CREATE TABLE SQL副本,在MySQL的开发实例上运行它,然后将生成的FRM文件复制到还原的实例中。如果您无法访问CREATE TABLE语句,可以尝试以下操作:

  1. 在还原的数据库中,运行create table innodb_table_monitor (a int) ENGINE=InnoDB
  2. 查看MySQL服务器错误文件,直到表监视器数据被转储(通常大约一分钟)。
  3. 运行drop table innodb_table_monitor
  4. 停止还原的数据库
  5. 编写与表监视器输出相匹配的SQL,例如: TABLE: name db/mylosttable,id 07872,标志1,列5,索引1,appr.rows 1828列: id: DATA_MYSQL DATA_NOT_NULL len 12;名称: 12 DATA_NOT_NULL len 45;DB_ROW_ID: DATA_SYS pr256 len 6;DB_TRX_ID: DATA_SYS prtype 257 len 6;DB_ROLL_PTR: DATA_SYS prtype 258 len 7;索引:名称GEN_CLUST_INDEX,id 17508 17508,字段0/5,uniq 1,类型1根页3,appr.key值1828,叶页9,大小页10字段: DB_ROW_ID DB_TRX_ID DB_ROLL_PTR id name可表示为:如果存在mylosttable,则为: drop;创建表mylosttable( id char(12) NULL,name varchar(45) NULL );如果您对表监视器输出感到困惑,请查看具有已知模式的表的输出。
  6. 在MySQL的开发实例上运行上面的SQL
  7. 将开发服务器中创建的FRM文件复制到还原的数据库中。您将在相应数据库的子目录中的MySQL数据目录中找到它们。
  8. 重新启动还原的数据库注意,您可以将FRM文件从您的开发系统复制到一个活动数据库实例中。上面停止服务器的原因是,如果您在创建innodb_table_monitor表后使数据库崩溃,它将使ibdata文件处于不一致的状态,您将不得不从备份重新开始。
  9. 测试这些表是否使用select *语句工作。如果您错了,您将看到: ERROR 2013 (HY000):在查询期间丢失到MySQL服务器的连接

这意味着数据库崩溃了。如果发生这种情况,对dev实例执行create table innodb_table_monitor...,并将输出与还原实例的原始输出进行比较。你很可能会发现你漏掉了一个NULL或诸如此类的小东西。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/536530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档