【问题标题】:mysql innodb currupted tablemysql innodb 损坏的表
【发布时间】:2014-04-06 07:50:47
【问题描述】:

我使用的是 MySQL 5.1.68。最近,由于输入不当,我的数据库表已损坏。 我试图转储表并更改 innodb_force_recovery 但它们都不起作用。 表索引未损坏。问题出现在已输入“,”字符的字符串列中。我知道损坏开始的行,我不在乎该行及以下的数据是否会被删除。我可以从 ibdata 文件中手动删除这些记录吗? 还有其他方法吗?

【问题讨论】:

    标签: mysql sql innodb data-recovery


    【解决方案1】:

    您可以使用 mysqldump 转储表的一部分。例如,如果您想将表 foo 的行转储到主键值 1234 但不再进一步:

    $ mysqldump mydatabase foo --where "id <= 1234" > foo-dump.sql
    

    然后删除表 foo,希望消除损坏。然后恢复转储文件。


    @akuzmisnky 的评论是正确的(他是我在 Percona 的同事,他是世界上最有经验的 MySQL 数据恢复专家之一)。

    下面是他所指的动作顺序,更详细:

    1. 在不触及数据库损坏部分的情况下尽可能多地转储数据。这可能需要一些实验。也从未损坏的表中转储所有您的 InnoDB 数据。
    2. 停止 mysqld。
    3. rm InnoDB 表空间和日志文件。
    4. 启动mysql。
    5. 恢复转储文件。

    【讨论】:

    • 您不必这样做。成功转储所有表后,您需要从头开始重新创建 InnoDB 表空间。
    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2016-07-05
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2021-04-21
    相关资源
    最近更新 更多