我知道这个问题已被问过几次,但我的问题正在发生在我刚刚创建的一个表中。它只有10列,只有1行。
因此,与通常的悬挂问题不同,这不是具有大量数据的大型表的情况。然而它却悬而未决。
这是我正在运行的sql:
ALTER TABLE `db`.`Search`
ADD COLUMN `useremail` VARCHAR(256) NOT NULL COMMENT '' AFTER `id`;
很简单但却挂起(50分钟并计数。)我尝试退出Workbench
和Eclipse
并删除所有java
进程和一个mysqld
进程。但没有运气。
我正在使用Mac OSX El Capitain
。如何将此列添加到我的表中?
答案 0 :(得分:33)
我通过搜索“mysql alter table hanging”来解决这个问题,并认为应该记录答案(在评论中)。
如果您正在运行MySQL命令(在这种情况下是添加列)并且它意外挂起,例如不是由于表中数据的大小,而是检查针对数据库运行的其他进程。我让查询继续运行,与另一个客户端连接到服务器,然后键入
SHOW PROCESSLIST;
我的查询已挂起,此消息位于state
列中:
Waiting for table metadata lock
我注意到我的机器上有几个僵尸连接,将它们杀死(KILL xxx
,其中xxx
是Id
列中的数字),然后立即完成该过程。
答案 1 :(得分:0)
我在生产服务器的Galera群集(MariaDB)上遇到了同样的问题,冻结是由于带有默认值的alter table add列引起的,我可以看到SHOW PROCESSLIST
我关闭了服务器以强制终止该进程,但是我还有很多工作要重新启动群集。
这是第二次发生,我所做的就是等待查询完成,因为它必须处理150万行表,所以花了大约20分钟。然后表锁就会打开。