当我们使用客户端执行改表的相关操作, 如ALTER TABLE 或DROP TABLE 时, 由于某些原因在执行过程中意外退出了客户端, 再次进入执行时可能会一直卡住, 执行show processlist时, 出现Waiting for table metadata lock, 原因:有事务未提交.
可以看到状态为Query的进程, 正在执行的命令是drop table, 先kill掉所在进程487209:
kill 487209
然后查询未提交的事务:
select * from information_schema.innodb_trx;
确实有一条记录, 但是字段太多不好看, 换个显示格式, 后面加\G
select * from information_schema.innodb_trx\G
这就就好看多了:
这样就好看多了, 直接kill掉对应的trx_mysql_thread_id即可:
kill 485434;
再次执行改表语句, OK