【发布时间】:2011-03-14 05:30:55
【问题描述】:
我无法删除/删除崩溃的 Innodb 表。我收到以下错误:
ERROR 1051 (42S02): 未知表“帐户”
如果我想创建它,我会收到以下错误:
ERROR 1005 (HY000): 无法创建表'accounts' (errno: -1)
这发生在我的服务器意外断电后。
问候
【问题讨论】:
标签: mysql crash innodb recovery
我无法删除/删除崩溃的 Innodb 表。我收到以下错误:
ERROR 1051 (42S02): 未知表“帐户”
如果我想创建它,我会收到以下错误:
ERROR 1005 (HY000): 无法创建表'accounts' (errno: -1)
这发生在我的服务器意外断电后。
问候
【问题讨论】:
标签: mysql crash innodb recovery
在删除表之前关闭外键约束有帮助吗?
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。
【讨论】:
我的猜测是 InnoDB 甚至都没有加载(检查 SHOW ENGINES),所以在你先解决这个问题之前,你无法删除它。
通常你可以在恢复模式 3 中启动 InnoDB,删除你需要的任何东西,然后关闭并删除恢复模式设置:
http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
【讨论】:
我在这里http://www.randombugs.com/linux/crash-innodb-table.html 也发现了这个问题,似乎只需删除 ibdata 文件并重新启动 mysql 就可以解决这个问题。无论如何,如果您没有任何备份,这并不是真正的解决方案。
【讨论】:
对我有用的简单解决方案。
尝试删除表。
删除表tableOne;
你会看到错误:
ERROR 1051 (42S02): Unknown table 'tableOne'
从另一个数据库复制该表的创建语句或编写它。
创建表tableOne (ID int(11) NOT NULL, LOCKED tinyint(1) NOT NULL) ENGINE=InnoDB;
成功
Query OK, 0 rows affected (0.03 sec)
放下桌子
drop table tableOne;
成功
Query OK, 0 rows affected (0.01 sec)
【讨论】: