Mysql 死锁
背景
写恢复出厂脚本想 drop database
被阻塞waiting for meta data lock了,引发一系列追查。解决程序死锁。
show processlist; # 显示用户正在运行的进程
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 表记录锁等待的对应关系;