故障原因分析:
由报错信息可初步确认是由于数据库锁等待超时导致查询异常,即上述查询中的表被另 一个并行事务锁住,而执行该事务的线程状态为sleep,当锁表时间超过mysql设置参数innodb_lock_wait_timeout,会引发上述故障现象。

图示:
MySQL Error 1205: Lock wait timeout exceeded; try restarting transaction

临时方案:

1、定位锁表的线程ID:SELECT * FROM information_schema.innodb_trx ORDER BY trx_started

2、kill该线程ID:kill trx_mysql_thread_id

长远方案:

1、查看mysql参数innodb_lock_wait_timeout的设置大小:show variable like innodb_lock_wait_timeout

2、修改该参数在会话中的大小:SET GLOBAL innodb_lock_wait_timeout = 5000;
修改该参数在配置文件中的大小: SET innodb_lock_wait_timeout = 5000;

3、业务开发人员减少使用多表关联、子查询等复杂查询频率

相关文章: