只有.frm 文件和 ibd 时可用恢复 MySQL 表

如何解决 “Mysql 错误 #1146 -表不存在” 移动.IDB 文件所造成 (InnoDB) 目录之间直接 (表空间).

logo_mysql

问题

很多问题,我们就是我们创建的问题. 我刚刚建立了一个网站使用的 WordPress 以为: 去看这是如何在 PHP 中怎么样 7? 还行, 作为我 WampServer 使用 PHP 5.6, 所以我不得不 “快乐” 升级的主意 WampServer 2.5 (Apache 2.4.9, MySQL 5.6.17, PHP 5.5.12) 为 WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP 和 Php 7.0.10).

答案是肯定的, 开始备份, 但我伟大的滑不会从这类网站导出 SQL, 相反, 刚才 MySQL 文件的副本 (MySQL/数据) 和应用程序 (www/网站). 我很有信心它会工作, 像其他时代.

后与 PHP 安装新 WampServer 7, 将备份的文件和应用程序备份放, 只有当我去通过浏览器进行测试, 没露面的网站, 但 WordPress 的安装屏幕好像它是一个新的网站. 冻结了! 打开 PHPMyAdmin 并检查如果数据库还很好,看到了,, 尽管被列在数据库中, 当您单击上表,以查看数据下面的错误消息:

  MySQL 错误 #1146 -表 <TABLE_NAME> 不 ' t 存在

一直在寻找,只是发现你可以只复制或移动的文件直接到另一个 MySQL MySQL 目录,如果文件是 MyISAM 类型, 那些带有 frm 文件扩展名。原发性三叉神经痛。冰. 我不知道发生了什么事, 但我的数据库出现作为 InnoDB (.frm 和伊斯兰开发银行). 不幸的是, 只有事后 MySQL 通知文件:

  你不能自由地移动 .炎症性肠病文件数据库目录之间 作为 你可以使用 MyISAM 表文件. 
  存储在共享的 InnoDB 表空间的表定义包括数据库名称. 
  事务 Id 和 日志 存储在表空间文件中的序列号也不同数据库之间.

Solução

Cheguei ver algumas soluções 明了, mas 你 descrever 现在工会 que realmente funcionou 段 mim, apesar de parecer 边界元法 mais complexa, encontrada 无法开机自检 “还原表(s) 在 MySQL 数据库 frm 或炎症性肠病文件可用时只“.

注, 但, 第 de conhecimento, 淡水河谷 lembrar 阙 em relação ao 经济部智慧财产局 InnoDB, MySQL 在文件中你守卫结构和数据在 ibd.frm。. 理论已经足够, 可以坐下来!

一步 1: 重新创建.frm 文件的结构

正如所说, frm 包含您的表结构. 首先,我们需要检索这种结构,然后将数据填充. 你可以 3 下面描述的不同方法, 但之前, 让我告诉你一些关于 “Mysql 的实用程序”.

Mysql 的实用程序 | mysqlfrm

如果你不打算使用第一种方法提出了 (在线) 所以你需要使用的工具 “mysqlfrm” 提供的 “Mysql 的实用程序“.

此工具将提取的数据结构并生成创建表的 SQL 脚本. 为此, 下载 “Mysql 的实用程序” (像 mysql-实用程序-1.6.4-winx64.msi) 并安装它.

打开控制台 (命令 / 的的) 使用 CD 命令来移动默认安装目录 (像 C:\C:program FilesMySQLMySQL 实用程序 1.6\). 请注意,该目录是可执行文件 mysqlfrm.exe.

  裁谈会 "C:\C:Program FilesMySQLMySQL 实用程序 1.6"

选择以下方法之一来提取您.frm 文件中包含的表结构:

1º 方法 | 在线

1. 转到网站 HTTPS://recovery.twindb.com/;
2. 单击菜单中的 “恢复结构” 然后在 “从 frm 文件。“;
3. 按一下按钮 “浏览器…” 并选择您 frm 文件; 和
4. 按一下按钮 “上传” 和表创建脚本将显示在屏幕上.

它是可以发送多个文件 frm 一次生成所有表的单个脚本. 我只想让你与所有其.frm 之前创建.zip “浏览器/上传”.

2º 方法 | 使用 –诊断

/* 泛型示例 */
   mysqlfrm 诊断 "<源/路径>/mytable.frm" > "<destination/path/recovered_mytable.sql>"
 
/* WordPress 在实践与 wp_posts.frm 表中的示例 */
   mysqlfrm --诊断 "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.frm" > "C:\recovered_wp_posts.sql"

3º 方法 | 使用 –服务器

/* 泛型示例 */
  mysqlfrm 服务器=:密码@本地主机端口=3311 "<源/路径>/mytable.frm" > "<目的地/路径>/recovered_mytable.sql"
 
/* WordPress 在实践与 wp_posts.frm 表中的示例 */
  mysqlfrm --服务器=@本地主机 --端口=3307 ""(C):\wampbinMySQL\MySQL5.6.17\datameubancowp_posts.frm" > "(C):\recovered_wp_posts.SQL"

不使用 MySQL 端口! 选择任何其他可用. 请注意,该命令输出重定向到一个.SQL 文件保存在指定的路径中 (在案件, (C):).

一步 2: 重新创建您的数据库中的表

在一个新的数据库, 用在第步中生成的脚本创建一个表 1. 我亲自安装 WampServer 干净版本和使用 PHPMyAdmin (http://本地主机/phpmyadmin /) 创建数据库并导入在步骤中创建的 SQL 脚本 1 (recovered_wp_posts.sql). 此脚本将创建 2 MySQL 数据库目录中的文件:

  SUA_TABELA.frm SUA_TABELA.伊斯兰开发银行

在我的情况, 在中创建这些文件 (C):\wamp64binmysqlmysql5.7.14data<我的座位>. 换言之, 寻找您的 MySQL 安装,请注意,目录中 日期 将您的数据库和提及的两个文件.

一步 3: 删除新的.IDB 文件

若要删除新的.IDB 文件, 运行以下 SQL 命令:

/* 泛型示例 */
  ALTER TABLE mytable 丢弃的表空间;
 
/* Exemplo na prática com tabela wp_posts 做 WordPress */
  ALTER TABLE wp_posts 丢弃的表空间;

埃斯特角城统帅部删除链接恩特雷 o tabela e o 表空间 (在物理存储数据库文件), 和删除.IDB 文件.

一步 4: 将旧的.IDB 文件复制

原始的.IDB 文件 (它包含的数据) 需要复制到在.IDB 步骤中删除了的地方 3. 使用 Ctrl + C 和 Ctrl + V,或者杀了你自己通过使用命令行.

一步 5: 重新激活表

在步骤中断开的链接 3 需要用下面的命令恢复:

/* 泛型示例 */
  ALTER TABLE mytable 导入表空间;
 
/* Exemplo na prática com tabela wp_posts 做 WordPress */
  ALTER TABLE wp_posts 导入的表空间;

不要担心,如果您收到一些警告, 但, 它可能会出现以下错误的一般故障:

  #1808 - 架构不匹配 (表具有 ROW_TYPE_DYNAMIC 行格式, .炎症性肠病文件具有 ROW_TYPE_COMPACT 行格式。)

在这种情况下, 这发生了由于不同比 mysql 5.7.14 (新增功能) 创建一个默认表相比 Mysql 5.6.17 (老), 扫描电镜 o ROW_FORMAT = 紧凑.

所以, se você 娅 usando MySQL > = ao mysql5.7.14, 散打 que você 显微法瑟 é acrescentar ROW_FORMAT = 紧凑 na definição de criação da tabela.

  创建表 'wp_posts' (. . .) 引擎=InnoDB ROW_FORMAT=紧凑

Outros 错误

Apenas 段 deixar registrado, 注 de obter 苏塞苏 na extração de dados 做.frm, 结果 alguns 误差:

  # 在本地主机上的源: ... 连接.
  # 在端口上启动生成的服务器 3304 ... 试图停止错误失败生成的服务器.  进程 id = 6648.
  错误: 生成服务器操作失败. 克隆服务器错误: 无法与通信 新增功能 实例. 进程 id = 6648.. 要诊断, 再次运行该实用工具和 使用--详细程度选项查看从生成服务器邮件并纠正任何错误提出,然后再次运行该实用程序.
  成功: 与 PID 进程 6648 (子进程的 PID 7264) 已终止.
追踪 (最新电话持续):
  文件 "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py", 线 27,<模块>
  文件 "scripts\mysqlfrm.py", 线 422,<模块>
  文件 ".\mysql\utilities\command\read_frm.py", 线 439, 在 read_frm_files
  文件 ".\mysql\utilities\command\read_frm.py", 线 166, 在 _spawn_server
  文件 ".\mysql\utilities\command\serverclone.py", 线 180, 在 clone_server
  文件 ".\mysql\utilities\common\tools.py", 线 273, 在 get_mysqld_version 时发生 io 错误: [Errno 13] 权限被拒绝: ' version_check'

在 WordPress 的具体案例, 您需要删除生成下生成的 SQL 脚本。 frm, 所有条目默认 ‘0000-00-00 00:00:00’, 否则, 将捕捉该错误:

  #1067 - 默认值 (默认) 对于 'comment_date' 无效

就是这样!

字体

http://www.voxteneo.com/restoring-tables-mysql-database-frm-ibd-files-available/

https://medium.com/@alexquick/transporting-mysql-tablespaces-from-5-6-to-5-7-517c01345fbb#.72zermd8b

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

https://lanmenezesbr.wordpress.com/2014/10/21/mysql-erro-1146-table-doesnt-exist/

http://stackoverflow.com/questions/7759170/mysql-table-doesnt-exist-but-it-does-or-it-should

总点击数: 21400

12 评论 “只有.frm 文件和 ibd 时可用恢复 MySQL 表

  1. 罗德里戈 说︰:

    该怎么办当你看到下面的错误消息: #1815 – 内部错误. 不能在表中重置 Lsn “我的座位”.”myTable”: 数据结构损坏.
    我可以手动运行数据的插入? 如何做到这一点?
    因为已经谢谢你.

  2. 克里斯蒂安 · U 说︰:

    嗨泰勒,

    你是如何解决此错误的:
    错误: 生成服务器操作失败. 克隆服务器错误: 无法与新实例进行通信. 进程 id = 6648.. 要诊断, 再次运行该实用程序和使用 –详细程度选项查看从生成服务器邮件并纠正任何错误提出,然后再次运行该实用程序.
    成功: 与 PID 进程 6648 (子进程的 PID 7264) 已终止.

    我不断收到相同的消息,并 don´t 知道如何解决它.

    谢谢你

留言

您的电子邮件地址将不会发布. 与标记必填的字段 *