mysql无法丢弃腐败的innodb表

时间:2012-06-19 22:28:30

标签: mysql innodb disaster-recovery

所以我正在处理一个磁盘空间不足的MySQL服务器,并且主要是InnoDB表,当然这些表已经损坏了。我正试图删除并重新创建损坏的表,但MySQL不会让我对它们做任何事情,包括修复。正如您所看到的,这不是一种乐趣。应该注意的是,只有这一个表似乎会导致任何这些错误。

mysql> drop table myschema.mytable;
ERROR 2013 (HY000): Lost connection to MySQL server during query

mysql> repair table myschema.mytable;
#results in the following
| myschema.mytable | repair | Error    | Out of memory; restart server and try again (needed 2 bytes)               |
| myschema.mytable | repair | Error    | Incorrect information in file: './myschema/mytable.frm' |
| myschema.mytable | repair | error    | Corrupt 

mysql> describe myschema.mytable; 
ERROR 1037 (HY001): Out of memory; restart server and try again (needed 2 bytes) 

如果我停止服务器并将表的.frm和ibd文件移开,然后重新启动,我无法重新创建它,因为服务器说它已经存在(即使它在INFORMATION_SCHEMA中也看不到)。在这种状态下,我不能放弃它,因为服务器说它不在那里。

我看起来很高很低的答案但是在这一点上,但我不是DBA所以我迷失了。我无法弄清楚如何修复这个表,我无法弄清楚如何摆脱它。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我不确定此时我的回答是否对您有用,但我想这会对其他人有所帮助。

这不是一个非常罕见的问题。这种腐败的原因可能会有所不同,但修复很简单。

You have to dump your table and recreate it again.

我们可以通过在my.cnf文件中设置innodb_force_recovery=1参数然后重启mysql来实现这一点。

请阅读此链接以获取有关此参数的更多信息。 http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html

修复问题后,您可以删除参数。

干杯!