2010-07-10 49 views
4

我无法删除/丢弃坠毁的Innodb表。我收到以下错误:删除坠毁的Innodb表

ERROR 1051(42S02):未知表 '账户'

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

ERROR 1005(HY000):能否” t创建表'帐户'(errno:-1)

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

Regards

回答

3

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

+1

如果您使用的是innodb_file_per_table,那么您的表格数据将不会存储在默认的ibdata1和日志文件中,因此删除这些文件不会成为问题。当然,这不是一个理想的解决方案,但对于我的目的而言,ibdata1是一个黑盒子,比尝试恢复更容易删除。 – glyph 2013-11-18 17:03:08

3

是否在删除表格帮助之前关闭外键约束?

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

有一个bug报告,其中详细说明类似的东西,但我并不清楚它是否是同一个问题:

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

如果没有,你可以尝试mysqlcheck

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

您必须检查文档以获取最适合您数据库的选项。请务必注意文档第一段中有关在此命令运行时放置在表上的锁定的注释。

+1

我试过了,它没有工作。 – Sacx 2011-02-25 08:33:44

+0

设置foreign_key_checks = 0作品,谢谢! – antongorodezkiy 2013-06-20 12:37:52

1

我的猜测是InnoDB甚至没有加载(检查SHOW ENGINES),所以在你首先解决这个问题之前,你不能去掉它。

通常你可以在恢复模式3日开始的InnoDB起来,一滴无论你需要什么,然后关机并取出恢复模式设置:

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

0

简单的解决方案,为我工作。

  1. 试着删除表格。

    drop table tableOne;

你会看到错误:

ERROR 1051 (42S02): Unknown table 'tableOne' 
  • 复制从另一个数据库中创建表的语句或写。(1)NOT NULL)ENGINE = InnoDB;(3)NOT NULL,

  • 成功

    Query OK, 0 rows affected (0.03 sec) 
    
    1. 删除该表

      drop table tableOne; 
      

    成功

    Query OK, 0 rows affected (0.01 sec)