【问题标题】:MySQL InnoDB tables are missing and not counted in database structureMySQL InnoDB 表丢失且未计入数据库结构
【发布时间】:2011-06-03 07:21:54
【问题描述】:

我的 MySQL 表有一个严重的问题,曾经有 InnoDB 表在使用中,现在不知何故被隐藏了

看看这个[图片] *链接被删除 - 标题中的表格数量为 79,实际计数为 74。

这些表是在使用中的表

我的数据库最近没有任何备份,所以这对我来说是生死攸关的游戏

我检查了我的 VPS,我在 /etc/lib/mysql/db_name/ 找到了它们。

编辑:

我在网上搜索,发现每个表都应该有 3 个与之相关的文件。

例如,table_users 表有:

 -- table_users.frm
 -- table_users.MYD
 -- table_users.MYI

对于那些隐藏的表格,只有.frm文件,而表格的另外两个文件丢失了。

我应该将我的问题改为:如何从 .frm 文件中恢复 innodb 表?

【问题讨论】:

  • 您可以手动运行“SHOW TABLES”并检查您的表是否存在吗?
  • 是的,我这样做了,它列出了所有表格,包括那些丢失的表格
  • 当您尝试查询丢失的表时会发生什么。,.
  • @ovais 是的,它们列在那里,当我运行这个 sql 查询时:select * from table_users 它返回 table_users 不存在。我真的厌倦了这个
  • .frm 文件仅包含表的字段定义。它不会有任何表数据。因此,如果您只有一个 .frm 文件,则无法恢复除表结构之外的任何内容。

标签: mysql innodb


【解决方案1】:

InnoDB 没有这三个文件

InnoDB 数据存储在所有数据库和表的“ibdata1”中。 表定义存储在“tablename.frm”中

我会说您的 InnoDB 文件已损坏,您可能想看看这些工具: https://launchpad.net/percona-innodb-recovery-tool

【讨论】:

  • 这个很技术性,虽然我不知道如何安装恢复工具,但我已经阅读了所有文档。这个页面是我的确切问题:mysqlperformanceblog.com/2008/12/17/… 他给出了解决方案,但是当我使用指令时,它会在查询期间返回与 MySQL 服务器的丢失连接
  • 是的,这是因为您的 ibdata1 文件已损坏并且 MySQL 在尝试读取它时崩溃。我会考虑使用 Percona 的服务来恢复表 (percona.com/mysql-consulting/data-recovery)
【解决方案2】:

更新

首先,关于文件:

  • .frm - 表结构;
  • .myd - 表数据;
  • .myi - 索引。

要恢复表,可以尝试(先备份):

1) 运行 check table tablename - 用于所有数据库表;
2) 运行repair table tablename - 获取必要的表格。


再次更新

另一个想法...试试这个:

  1. 创建一个新数据库以恢复并创建与 .frm 文件同名的表(只有一个字段 - 仅用于创建新的 .frm 文件);
  2. 停止 mysql 服务并将创建的 .frm 文件替换为您的;
  3. 启动mysql服务并检查。

我期望正确的表格(当然没有数据)。抱歉,在建议之前,我暂时没有 PC 可检查...

【讨论】:

  • 这是为了在我的表格被隐藏时隐藏一个表格,我更新了我的主题,请再次阅读。
  • 很好,我知道,但这是我运行检查和修复命令后得到的结果:找不到文件:'./database/table_users.frm'(错误号:13
  • table_users 的路径是否正确 (/database/table_users.frm)?也许,那里的权限问题?
  • 当我将 table_users.frm 的所有者和组更改为 mysql 并刷新 phpmyadmin 它消失了,如果我进入 Check Table ...它说没有这样的表,然后当我 chown 和 chgrp 回来所有文件都进入root(用户名)并在那里并正在使用
  • @kpower.,丢失表的人是innodb,他们没有.myd/.myi文件。,也不能这样修复,。
【解决方案3】:

实际上我也遇到了丢失两个文件的相同问题。后来我发现当表的类型是innodb时,数据库文件夹将只有一个关联文件。

但您可以将表格类型更改为 myisam 以获取表格的所有三个文件。

现在根据备份,您可以随时随地导出数据库:)

PHP 很棒 :)

【讨论】:

    【解决方案4】:

    ![innodb image][1] INNODB SYSTEM TABLESPACE

    INNODB系统表空间包含在mysql数据目录中---

    INNODB 是系统表空间,分为两部分

    1>.frm 它可以描述表格格式,或者您可以说它是一个表格 *定义*

    2>.ibd 它包含所有系统相关文件,还包含数据和索引以及(InnoDB 主表空间包含 – ibdata1 – 和重做日志 – ib_logfile*。) ibdata1 包含您的 InnoDB 数据库,而 ib_logfile0 和 ib_logfile1 是 InnoDB 的日志文件。

    如果删除 ibdata1 文件,那么所有 InnoDB 表都将丢失。

    默认情况下,InnDB 使用共享“表空间”,它是来自单个逻辑存储区域的一个或多个文件。所有 InnoDB 表都存储在 tabespace 中(来自所有数据库)。默认情况下,InnoDB 在数据目录中创建两个 5MB 的日志文件:iblogfile0 和 iblogfile1。信息以循环方式记录,当日志填满时,日志前面的旧信息将被覆盖。因此,更大的日志允许 InnoDB 运行更长时间,而不必强制将日志中记录的更改应用于磁盘上的表空间。

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2021-08-10
      相关资源
      最近更新 更多