今天对线上一个表进行alter操作的时候碰到Waiting for table metadata lock。
Waiting for table metadata lock出现的原因是当一个没提交的事务使用了A表, 另外一个session 对A表进行alter,出现waiting for table metadata lock而且会阻塞此表之后所有的操作包括一致性读取。官方链接:http://dev.mysql.com/doc/refman/5.5/en/metadata-locking.html

所以线上执行alter最好是在业务不繁忙的时候进行, 如果不幸碰到Waiting for table metadata lock简单粗暴的方法是找到相关占用表的SQL 将他kill掉。至于找的方法,show engine innodb status\G的Transactions节去找。