解决MySQL:Waiting for table metadata lock 问题

532 阅读1分钟

遇见问题

发现问题:通过sqlalchemy更改数据库时,python manage.py db upgrade一直不动;在命令行使用select * form user没有反应。 推测user表锁住了。

验证问题

百度,MySQL表锁住了的解决方案,也是验证是否是表锁住了的问题。

查看在用的表

show OPEN TABLES where In_use > 0; 现在图片中是没有显示有表在用的(这是正常情况,如果有表锁住的话,会显示哪个个数据库,哪张表,in_use=1)

查看进程号

show processlist;

这里会显示阻塞的进程,也就是你未执行完成的SQL命令。

如果有阻塞情况的话:会有Waiting for table metadata lock,在这之后会显示未执行完成的sql命令。

举例: | 10664505 | root | ip:port | tables | Query | 5074 | Waiting for table metadata lock | ALTER TABLE tables drop column column 这里是删除表的某一列的命令。

10664505 是这个阻塞进程的进程号。

解决问题

解决表锁住的问题

将阻塞的任务进程kill掉: kill 110664505;

然后再使用 select * from user\G发现能正常的打印用户信息了。

希望对你有所帮助!