MySQL在进行一些alter table
等DDL
操作时,如果该表上有未提交的事务则会出现 Waiting for table metadata lock
,
而一旦出现metadata lock
,该表上的后续操作
都会被阻塞。
使用管理员权限登录mysql数据库查看未提交的事务:
(如果不是管理员权限会报错:Access denied; you need (at least one of) the PROCESS privilege(s) for this operation)
select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx;
这时会看到未提交的事务,有以下相关信息:
trx_state
: 事务状态,一般为RUNNINGtrx_started
: 事务执行的起始时间,若时间较长,则要分析该事务是否合理trx_mysql_thread_id
: MySQL的线程ID,用于kill
trx_query
: 事务中的sql杀死线程ID,问题解决。
kill 12345;