【问题标题】:How to repair corrupted table如何修复损坏的表
【发布时间】:2011-09-04 20:32:42
【问题描述】:

我有一个名为 Samplemysqltable。我用一些值编辑了文件/var/lib/mysql/Sample.MYI。现在检查 TABLE 示例查询显示为

表'Sample'的密钥文件不正确;尝试修复它

为了修复这个问题,我尝试使用以下命令myisamchk -r Sample.MYI。但结果是“myisamchk:

错误:尝试重新创建索引文件时出现错误 140 MyISAM-table Sample.MYI is not fixed because of errors"。

现在如何修复这张表?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    REPAIR TABLE 语句可以帮助您恢复表。此语句适用于 MyISAM、存档和 CSV 表。命令如下: 维修 表 tbl_name [, tbl_name]... [快速] [扩展] [USE_FRM] 在哪里 QUICK:如果您使用此选项,则修复表会尝试仅修复索引文件而不是数据文件。 EXTENDED:如果你使用这个选项,那么 MySQL 会逐行创建索引,而不是在排序时一次创建一个索引。 USE_FRM:如果 .MYI 索引文件丢失或其标头已损坏,则使用此选项。

    在这种情况下,您可以尝试使用 USE_FRM 选项来修复表。 如果上述方法不起作用,那么您可以尝试使用 Stellar 的这个 MySQL 修复工具,但您应该首先尝试手动方法,并且只有在您想要快速解决问题的情况下才应使用此方法。该软件声称可以修复 MySQL 数据库的 InnoDB 和 MyISAM 表,并以原始格式安全地恢复所有不可访问的数据库对象,包括主键、视图、触发器、表等。

    【讨论】:

      【解决方案2】:

      检查损坏表的状态

      check table tablename;
      

      例如

      mysql> check table realtime_clicks_update;
      +--------------------------------+-------+----------+----------+
      | Table                          | Op    | Msg_type | Msg_text |
      +--------------------------------+-------+----------+----------+
      | logdata.realtime_clicks_update | check | status   | OK       |
      +--------------------------------+-------+----------+----------+
      

      如果状态不正常,则使用以下命令修复它

      mysql> repair table tablename;
      

      【讨论】:

        【解决方案3】:

        以防万一您没有备份,没有原始文件并且无法重新下载,这里有一些链接可能对您有所帮助:

        http://www.felipecruz.com/repair-mysql-database.php
        http://dev.mysql.com/doc/refman/5.0/en/myisam-repair.html(另请参阅本页底部的链接)
        http://forums.mysql.com/read.php?21,362974,362974

        以下命令将从头开始重新创建 .myi 文件:

        REPAIR TABLE tablename USE_FRM
        

        不过要小心,这个页面:http://dev.mysql.com/doc/refman/5.5/en/repair-table.html 说:

        仅当您无法使用常规 REPAIR 模式时才使用 USE_FRM 选项!告诉服务器忽略 .MYI 文件会使 .MYI 中存储的重要表元数据无法用于修复过程,这可能会产生有害后果:[.....]

        最后如何以不同的方式重做:

        http://www-users.cs.york.ac.uk/susan/joke/foot.htm

        【讨论】:

        • @ssbecse,您尝试了哪个链接,哪种解决方案适合您?
        • felipecruz.com/repair-mysql-database.phpdev.mysql.com/doc/refman/5.0/en/myisam-repair.html.In 这些有名为“REPAIR TABLE tablename USE_FRM;”的选项.它工作正常
        • @ssbecse,酷 MySQL 并没有真正修复任何东西,它只是从头开始重新创建 .myi 文件。如果它解决了您的问题,请随时接受答案:-)。
        • @ssbecse,修复总是存在数据丢失的危险,因为 MySQL 必须猜测现在有损坏数据的地方可能有哪些数据。如果它猜错了,它可能只是将完全错误的数据放入其中。例如假设 MySQL 报告您的 .myi 文件错误,但事实并非如此,并且您的 .myi 很好,但您的数据文件已损坏。然后 MySQL 可能会重新创建一个 .myi 文件并根据损坏的数据文件覆盖一个好的文件。不用担心,总是先备份。试试看它是否有效,如果它不能从备份中恢复并尝试其他方法。
        • 在我的应用程序中,定期更新 MySQL 表中的数据。如何将备份保存到表中会损坏。
        【解决方案4】:

        放回原来的 Sample.MYI 文件 :)

        【讨论】:

        • 在我的应用程序中,我进行了负面测试。即,如果表损坏,我的代码应该注意修复该表...
        • @ssbecse,这是一个愚蠢的想法。这就是备份的用途。除了 .myi 格式是一个移动的目标之外,MySQL 从未承诺他们不会更改该文件的布局。
        • 只有在基础表完全没有改变的情况下才有效,在生产中不太可能发生这种情况。
        • 约翰,这个想法是使用备份 - 通常不是文件本身。
        【解决方案5】:

        您为什么编辑.MYI 文件?你不应该那样做。

        从备份中恢复,然后以适当的方式重新应用更改。

        【讨论】:

          猜你喜欢
          • 2010-11-23
          • 2019-11-29
          • 1970-01-01
          • 2020-12-02
          • 1970-01-01
          • 2010-09-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多