首页 > 解决方案 > MySQL Alter Table DB 冻结

问题描述

我正在使用 Ubuntu 16.04.3 和 mysql Ver 14.14 Distrib 5.7.22。

当我尝试使用以下命令更改我的 db 表列时,数据库似乎冻结了;

mysql> alter table records 修改列名 varchar(150);

表大小为 2.8MiB(6,000 条记录)。

我只是想改变varchar(150)部分。

我尝试在 HeidiSQL 和 Workbench 等 GUI 程序中做同样的事情,结果相同 - 程序崩溃,我必须重新启动会话。

我以 root 身份登录到数据库和服务器。我检查了/var/log/mysql/error.log但它只显示失败的登录尝试,与此错误无关。

任何想法发生了什么或我如何解决这个问题?

标签: mysqllinuxdatabaseubuntu-16.04alter

解决方案


您是否有任何应用程序针对此表运行长时间运行的事务?如果有任何事务持有元数据锁,它将无法启动 ALTER TABLE。

如果您可以在 ALTER TABLE 挂起时在另一个窗口中运行 SHOW PROCESSLIST,它可能会显示“等待元数据锁定”。

+----+------+-----------+------+---------+------+---------------------------------+------------------------+-----------+---------------+
| Id | User | Host      | db   | Command | Time | State                           | Info                   | Rows_sent | Rows_examined |
+----+------+-----------+------+---------+------+---------------------------------+------------------------+-----------+---------------+
|  4 | root | localhost | test | Query   |    0 | init                            | show processlist       |         0 |             0 |
|  5 | root | localhost | test | Query   |   15 | Waiting for table metadata lock | alter table foo...     |         0 |             0 |
+----+------+-----------+------+---------+------+---------------------------------+------------------------+-----------+---------------+

然后,您需要确定哪个应用程序有一个阻塞 ALTER TABLE 的开放事务,并让该应用程序完成其事务,或者终止该事务。


推荐阅读