mysql - 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
但它只显示失败的登录尝试,与此错误无关。
任何想法发生了什么或我如何解决这个问题?
解决方案
您是否有任何应用程序针对此表运行长时间运行的事务?如果有任何事务持有元数据锁,它将无法启动 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 的开放事务,并让该应用程序完成其事务,或者终止该事务。
推荐阅读
- r - 在 R 中运行具有预定义方差分量的线性混合模型(lmer,lme4)
- c# - 如何在指定文本之前和之后获取字符串,然后在 C# 中打印到 txt?
- maven - Maven 仅从 Artifactory 或中央解决工件,而不是两者
- swift - 午睡配置“由关闭错误自行捕获”
- javascript - JavaScript:select1 on-change 填充 select2 中的特定选项(带有 2 个值)
- android - 获取图片名称
- powershell - 使用 icacls 设置文件夹权限
- google-app-engine - 大量使用 ndb 模型会影响性能吗?
- javascript - 要求浏览器探测另一个站点上的数据
- c++ - 从用户定义的头文件调用函数时出现未定义的引用错误,它的实现在 .cpp 文件中