MySql alter table挂起

时间:2016-02-09 13:42:54

标签: mysql

我知道这个问题已被问过几次,但我的问题正在发生在我刚刚创建的一个表中。它只有10列,只有1行。

因此,与通常的悬挂问题不同,这不是具有大量数据的大型表的情况。然而它却悬而未决。

这是我正在运行的sql:

ALTER TABLE `db`.`Search` 
ADD COLUMN `useremail` VARCHAR(256) NOT NULL COMMENT '' AFTER `id`;

很简单但却挂起(50分钟并计数。)我尝试退出WorkbenchEclipse并删除所有java进程和一个mysqld进程。但没有运气。

我正在使用Mac OSX El Capitain。如何将此列添加到我的表中?

2 个答案:

答案 0 :(得分:33)

我通过搜索“mysql alter table hanging”来解决这个问题,并认为应该记录答案(在评论中)。

如果您正在运行MySQL命令(在这种情况下是添加列)并且它意外挂起,例如不是由于表中数据的大小,而是检查针对数据库运行的其他进程。我让查询继续运行,与另一个客户端连接到服务器,然后键入

SHOW PROCESSLIST;

我的查询已挂起,此消息位于state列中:

Waiting for table metadata lock

我注意到我的机器上有几个僵尸连接,将它们杀死(KILL xxx,其中xxxId列中的数字),然后立即完成该过程。

答案 1 :(得分:0)

我在生产服务器的Galera群集(MariaDB)上遇到了同样的问题,冻结是由于带有默认值的alter table add列引起的,我可以看到SHOW PROCESSLIST 我关闭了服务器以强制终止该进程,但是我还有很多工作要重新启动群集。

这是第二次发生,我所做的就是等待查询完成,因为它必须处理150万行表,所以花了大约20分钟。然后表锁就会打开。