今天在执行一条修改 MySQL 字段类型长度命令的时候发现一直在等待,表现是卡住了:

ALTER TABLE `my_table_name` MODIFY COLUMN `my_field_name` VARCHAR(300);

以前修改表结构的时候也没遇到这个问题,初步怀疑是有什么进程在使用表,导致该执行语句没法拿到表锁。

但这个库对应的网站(基于 php)基本没啥访问量,所以感觉有点奇怪。

于是使用 show processlist; 命令查看了一下 mysql 的进程:

05682-lh0ko4znj5.png

可以看到确实有连接在用。注意这个显示 waiting for table metadata lock 的进程就是我的修改表结构命令的进程,除此以外,还有另外一个使用该库的进程。

突然想到,应该是有一个 php 后台进程有使用数据库,并且是使用的同一张表,应该是这个问题。于是停掉这个后台进程,果然修改成功。