waiting for meta data lock

Mysql 死锁

背景

写恢复出厂脚本想 drop database 被阻塞waiting for meta data lock了,引发一系列追查。解决程序死锁。

show processlist; # 显示用户正在运行的进程

image-20200808111615255

kill id;  # kill正在运行的线程
show OPEN TABLES where In_use > 0; 

In_use
# 给这个表上锁,或者等待获得锁
Name_locked
# Name locking is used for operations such as dropping or renaming tables
# kill trx_mysql_thread_id  查看当前的事务
SELECT trx_state, trx_started, trx_mysql_thread_id, trx_query FROM INFORMATION_SCHEMA.INNODB_TRX;

  • information_schema 库中新增了三个关于锁的表,亦即 innodb_trx、innodb_locks 和 innodb_lock_waits;
  • innodb_trx 表记录当前运行的所有事务;
  • innodb_locks 表记录当前出现的锁;
  • innodb_lock_waits 表记录锁等待的对应关系;