Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法

MYSQL 报错:

SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction

 

转载:https://my.oschina.net/quanzhong/blog/222091

 

  • 环境

    MySQL5.5 

  • 现象

    A.数据更新或新增后数据经常自动回滚。

    B.表操作总报 Lock wait timeout exceeded 并长时间无反应

  • 解决方法

    A.应急方法:show processlist; kill掉出现问题的进程

    B.根治方法:select * from innodb_trx 查看有是哪些事务占据了表资源。

        C.我的方法:设置MySQL锁等待超时 innodb_lock_wait_timeout=50 ,autocommit=on

  • 该类问题导致原因

    据我分析,Mysql的 InnoDB存储引擎是支持事务的,事务开启后没有被主动Commit。导致该资源被长期占用,其他事务在抢占该资源时,因上一个事务的锁而导致抢占失败!因此出现 Lock wait timeout exceeded 

 

 

网上搜索解决办法: 执行sql语句kill掉sleep状态的进程。

自己实践过可行:

 

Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法_第1张图片


/* 显示进程 */
show processlist;


/* kill掉进程 */

while :
do
n=`mysqladmin -uroot -p*** processlist | grep -i sleep | wc -l`
date=`date +%Y%m%d\[%H:%M:%S]`
echo $n
if [ "$n" -gt 10 ]
then
for i in `mysqladmin -uroot -p*** processlist | grep -i sleep | awk '{print $2}'`
do
mysqladmin -uroot -p*** kill $i
done
echo "sleep is too many i killed it" >> /root/tmp/sleep.log
echo "$date : $n" >> /root/tmp/sleep.log
fi
sleep 120 #每隔120 秒 执行一次

 

你可能感兴趣的:(MySQL)