锁表问题提示:Lock wait timeout exceeded; try restarting transaction
解决锁表方法
查询数据库阻塞的进程
SELECT * FROM information_schema.innodb_trx
主要看箭头指向的这几个字段,如果有阻塞数据(不为0的就是阻塞的),找到后在根据下图这个字段:try_mysql_thread_id 作为这条数据的主键id执行这个sql进行删除: kill id ;(杀死对应id的进程).假设这里try_mysql_thread_id=进程id 的这条数据是锁了。我们执行 kill 进程id 删除就不在锁表了
常用锁表命令
//查看进程id,然后用kill id杀掉进程
show processlist;
SELECT * FROM information_schema.PROCESSLIST;
//查询正在执行的进程
SELECT * FROM information_schema.PROCESSLIST where length(info) >0 ;
//查询是否锁表
show OPEN TABLES where In_use > 0;
//查看被锁住的
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
//等待锁定
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
//杀掉锁表进程
kill 12041