MySQL故障排除帮助:无法在单个表上执行任何操作

12

非常抱歉,对于这个问题我没有太多的信息。

我有一个只使用单个MySQL MySIAM引擎表的数据库,其中包含约80K条记录(持续增加),但今天突然停止响应。

我甚至无法执行任何一个查询语句(例如SELECT * FROM table LIMIT 1),服务器花费时间执行,似乎永远不会停止。

我也无法将表转储以备份。

然而,同一数据库中使用相同引擎(MySIAM)的其他表都能正常工作。

我不确定下一步该怎么做。不确定是不是死锁或其他原因导致的问题。

该表中的所有数据都非常重要。如果您能帮助我确定问题的原因,我将不胜感激。例如,是否有命令可以检查表格是否损坏,以及原因等等。


更新::::: 我也无法使用CHECK TABLE命令,它也需要很长时间才能执行完成。

更新:::::: 我进行了调查,并发现了关于REPAIR TABLE的一些信息。 但是,建议我首先备份。由于我无法为此表进行备份,因此是否可以使用REPAIR命令呢?


::::::::::::: 已解决 :::::::::::

按照Cristian的帮助,使用SHOW PROCESSLIST;命令。我发现有一个状态为“Copying to tmp table”的进程阻塞了另一个进程。 因此,我使用KILL <process id> 来杀死该进程,然后一切恢复正常。

谢谢 Chanon


你可以分享一下你所使用的操作系统的详细信息吗?你使用的是32位操作系统吗?如果是的话,我想你可能会遇到内存映射问题。 - Aravind.HU
你能否运行 SHOW ENGINE INNODB STATUS 命令,看看它是否提供了有关死锁的更多信息? - Jagmag
你好,Aravind,我在Windows Web Server 2008 R2上运行MySQL 5.1,64位操作系统。这种情况以前发生过,但只持续了大约一个小时,然后一切都恢复正常(同一张表)。然而,现在已经过去了2个小时,那个单独的表仍然没有响应(我可以查看表结构的信息,但无法查看其数据)。不确定是否可以检查它是否存在内存映射问题? - Chanon
嗨InSane,我这个表使用的是MyISAM引擎。 然而,在运行SHOW ENGINE INNODB STATUS命令后,没有任何挂起和队列。这样应该没问题吧? - Chanon
谢谢你的回答。我也遇到了死机问题。 - Maciek Semik
1个回答

8

抱歉,我无法评论你的问题... :)

请问您运行的是哪个版本的MySQL,5.1.xx吗?

能否发布您的SHOW PROCESSLIST;状态?

更新: Chanon,在此事件之后,并为了避免这个问题,您需要检查并优化将MySQL发送到“复制到tmp表”状态的查询,以避免临时分区变慢和“磁盘已满”的风险。


嗨,Cristian,大约有100条记录列出,几乎所有记录的状态都是“已锁定”。所有命令都是“查询”。我能做些什么来解决这个问题吗?请注意,在状态“复制到tmp表”之后,一切都被锁住了。 - Chanon
你必须在非锁定状态下找到更早的查询,比如“正在发送数据”、“释放项目”或其他状态,找到它并粘贴状态(如果可以)。然后你能指定确切的 MySQL 版本吗?此外,你能发布你的 “SHOW VARIABLES LIKE '%cache%';” 吗? - Cristian Porta
嗨Cristian,状态显示“复制到临时表”后,一切都被锁住了。我能直接删除这个进程吗?如果可以,用什么命令可以实现? - Chanon
通常情况下,您可以在状态为“复制到临时表”时轻松终止查询,而不会出现任何问题...但是,在此之前,您能否发布该查询的SQL语句? - Cristian Porta
嗨,@Cristian Porta,我使用了“KILL”命令来杀死那个进程,一分钟后一切都解锁和释放了。非常感谢您在这方面的帮助,您真的救了我的一天。我非常感激这一点。再次感谢 :) - Chanon
没关系,顺便说一下,我认为你需要遵循我的建议/在答案中进行更新 ;) - Cristian Porta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接