【问题标题】:Delete a Crashed Innodb table删除崩溃的 Innodb 表
【发布时间】:2011-03-14 05:30:55
【问题描述】:

我无法删除/删除崩溃的 Innodb 表。我收到以下错误:

ERROR 1051 (42S02): 未知表“帐户”

如果我想创建它,我会收到以下错误:

ERROR 1005 (HY000): 无法创建表'accounts' (errno: -1)

这发生在我的服务器意外断电后。

问候

【问题讨论】:

    标签: mysql crash innodb recovery


    【解决方案1】:

    在删除表之前关闭外键约束有帮助吗?

    set foreign_key_checks=0;
    drop table <table>;
    set foreign_key_checks=1;
    

    有一个错误报告详细说明了类似的问题,但我不清楚它是否是同一个问题:

    http://bugs.mysql.com/bug.php?id=5784

    如果没有,你可以试试mysqlcheck:

    mysqlcheck -u root -p <dbname> --auto-repair --check --optimize --databases
    

    您必须查看文档以了解最适合您的数据库的选项。请务必注意文档第一段中关于在此命令运行时放置在表上的锁的 cmets。

    【讨论】:

      【解决方案2】:

      我的猜测是 InnoDB 甚至都没有加载(检查 SHOW ENGINES),所以在你先解决这个问题之前,你无法删除它。

      通常你可以在恢复模式 3 中启动 InnoDB,删除你需要的任何东西,然后关闭并删除恢复模式设置:

      http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html

      【讨论】:

        【解决方案3】:

        我在这里http://www.randombugs.com/linux/crash-innodb-table.html 也发现了这个问题,似乎只需删除 ibdata 文件并重新启动 mysql 就可以解决这个问题。无论如何,如果您没有任何备份,这并不是真正的解决方案。

        【讨论】:

        • 如果您使用的是 innodb_file_per_table 那么您的表数据将不会存储在默认的 ibdata1 和日志文件中,因此删除它们不会有问题。当然这不是一个理想的解决方案,但出于我的目的,ibdata1 是一个黑匣子,比尝试恢复更容易删除。
        【解决方案4】:

        对我有用的简单解决方案。

        1. 尝试删除表。

          删除表tableOne;

        你会看到错误:

        ERROR 1051 (42S02): Unknown table 'tableOne'
        
        1. 从另一个数据库复制该表的创建语句或编写它。

          创建表tableOne (ID int(11) NOT NULL, LOCKED tinyint(1) NOT NULL) ENGINE=InnoDB;

        成功

        Query OK, 0 rows affected (0.03 sec)
        
        1. 放下桌子

          drop table tableOne;  
          

        成功

            Query OK, 0 rows affected (0.01 sec) 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多