mysql出现锁表的情况 (mysql锁表原因及解决方案)

前言

今天在新增Mysql数据库表新字段的时候,发现只要执行sql就会出现锁表的情况。

记录一下具体的排查流程和处理方案

问题定位和处理

查看了mysql的进程

show processlist;

发现一直在等待锁 Waiting for table metadata lock。

mysql死锁的排查过程,mysql总是出现表死锁

Waiting for table metadata lock

在查询结果中发现,除了这个也其他异常的情况。

初步排除有可能是以下情况导致的:

长事务运行

处理:kill掉 或 等待事务执行完成

未提交事物

处理流程:

1.查询正在执行的事务

select * from information_schema.innodb_trx

获取到线程ID: trx_mysql_thread_id

mysql死锁的排查过程,mysql总是出现表死锁

2.定位找到出现问题的SQL

select * from performance_schema.events_statements_current

获取到对应 THREAD_ID 的语句,从而可以知道哪个SQL执行有问题

mysql死锁的排查过程,mysql总是出现表死锁

3.使用 kill ${trx_mysql_thread_id} 杀掉进程让其回滚。

4.针对sql进行优化或者业务优化