代码之家  ›  专栏  ›  技术社区  ›  Eddy

MySQL ALTER TABLE挂起

  •  22
  • Eddy  · 技术社区  · 10 年前

    我知道这个问题已经被问了好几次了,但我的问题发生在我刚刚创建的表格上。它只有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 。如何将此列添加到表中?

    2 回复  |  直到 6 年前
        1
  •  60
  •   jds Gerryjun    10 年前

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

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

    SHOW PROCESSLIST;
    

    我的查询挂起了,这条消息在 state 列:

    Waiting for table metadata lock
    

    我注意到我的机器有几个僵尸连接,把它们杀死了( KILL xxx 哪里 xxx 是 Id 列),然后该过程立即结束。

        2
  •  2
  •   Ahmed ELFASSI    8 年前

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

    第二次发生了, 我所做的就是等待查询完成 因为它需要处理一张1.5M行的表格,所以花了大约20分钟。则表锁打开。