问题分析
出现情况:执行增删改查sql语句的时候,MySQL 抛出了这样的异常。错误提示的意思:锁等待超时;试着重新启动事务,是因为执行sql语句被锁住了,所以释放这个锁。
解决方案
我们可以通过到information_schema 中来进行查找被锁的语句。
我们可以用下面三张表来查原因:
- innodb_trx 当前运行的所有事务
- innodb_locks 当前出现的锁
- innodb_lock_waits 锁等待的对应关系
简单粗暴:
执行sql语句查看数据库哪些sql被锁住了
select * from information_schema.innodb_trx
图中红色语句 LOCK WAIT为占用系统资源的语句,我们需要杀掉这个锁,执行 kill 线程id号。上面这条记录的id为199120823069, trx_mysql_thread_id 为 738178711, 所以我们执行:kill 738178711杀掉这个MySQL语句的线程即可。
执行之后:
kill 21530
// 查询线程
// SELECT * from information_schema.processlist WHERE id = 21530;
// show full processlist;