mysql 无法删除损坏的 innodb 表

标签 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,所以我迷失了。我不知道如何修复这张 table ,也不知道如何摆脱它。

有什么建议吗?

最佳答案

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

这并不是一个很罕见的问题。这种损坏的原因可能多种多样,但修复方法很简单。

您必须转储表并重新创建它。

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

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

问题解决后,您可以删除该参数。

干杯!

关于mysql 无法删除损坏的 innodb 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11110400/

相关文章:

php - laravel 将数据从 Blade 文件传递到 Controller

使用聚合函数在 where 语句中小于或大于的 MySQL 查询?

InnoDB 的 MySQL 死锁问题

mysql - 如何锁定尚不存在的 InnoDB 行?

mysql - 在 MySQL RDS 上执行带有 ISNULL 条件查询的左连接需要很长时间

algorithm - 当某些消息可能因灾难而丢失时,检测从何处开始重播消息

mysql - 从项目主表中不存在字段的表中选择

php - MySQL:在Join语句和Join语句顺序中使用列别名?

amazon-s3 - 从 S3 下载大量文件

bash - 被bash脚本意外删除了数据库,求救