我也来记一次 关于 MySQL Waiting for table metadata lock 的问题

By 刘志军, 2019-06-05, 分类: qa

mysql

问题的起因是这样的,我在准备执行修改表结构的SQL,主要是新增字段,然后就卡住了,网站也无法访问了。系统瞬间崩溃,出现 502访问超时。

现在就来分析一下这个问题的原因。

Waiting for table metadata lock 的意思当前线程正在等待获取该表的 metadata 独占锁,但是该锁现在被其它线程占用了,如果对方一直不释放的话,我们就只能一直处于等待状态,后面对该表查询的线程也只能处于等待的状态,因此就导致了前面出现的这种情况,表结构修改不了,网站也无法正常访问了。

怎么知道该操作正处于 Waiting for table metadata lock 状态呢? 使用命令 show processlist 查看当前线程的运行情况。

如果你的网站访问量很大的话,而且修改的这个表又是被频繁读写的表,那么现在你估计会看到很多条Waiting for table metadata lock,大家都在等着这把锁的释放。怎么办呢?

正常情况就是等会儿就好了,如果长时间等待,该锁一定是被未提交的事务占用了,可以通过sql查询

select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx

找到正在运行的事务,然后把这些线程kill,锁就被释放了。


有问题可以扫描二维码和我交流

关注公众号「Python之禅」,回复「1024」免费获取Python资源

python之禅

猜你喜欢

2014-02-17
MySQL分表分区
2017-04-27
基于Mycat分布式MySQL数据库部署实践指南
2019-06-03
MySQL 5.8 导出文件 报错 secure-file-priv
2016-08-11
CentOS7 环境 MySQL5.7 安装
2016-05-13
centOS重新安装MySQL5.6
2014-02-16
系统学习MySQL
2016-03-03
MySQL启动报错问题排查:InnoDB: Unable to lock ./ibdata1 error
2014-04-03
MySQL慢查询配置