服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL中出现lock wait timeout exceeded问题及解决

MySQL中出现lock wait timeout exceeded问题及解决

2022-08-17 13:14刘大大__ Mysql

这篇文章主要介绍了MySQL中出现lock wait timeout exceeded问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

1、MySQL出现lock wait timeout exceeded; try restarting transaction

我们可以通过到information_schema 中来进行查找被锁的语句。

解释:information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。

我们可以用下面三张表来查原因:

  • innodb_trx 当前运行的所有事务
  • innodb_locks 当前出现的锁
  • innodb_lock_waits 锁等待的对应关系

如果数据库中有锁的话,我们可以使用这条语句来查看:

?
1
select * from information_schema.innodb_trx

MySQL中出现lock wait timeout exceeded问题及解决

图中红色语句 LOCK WAIT为占用系统资源的语句,我们需要杀掉这个锁,执行 kill 线程id号。上面这条记录的id为199120823069, trx_mysql_thread_id 为 738178711, 所以我们执行:kill 738178711杀掉这个MySQL语句的线程即可。

执行之后:

?
1
2
3
4
kill 738178711
// 查询线程
// SELECT * from information_schema.processlist WHERE id = 738178711;
// show full processlist;

MySQL中出现lock wait timeout exceeded问题及解决

其他的记录不需要关注,因为其他的记录状态为“RUNNING” 即正在执行的事务,并没有锁。

2、三张表字段说明

innodb_trx

?
1
desc information_schema.innodb_trx;

MySQL中出现lock wait timeout exceeded问题及解决

innodb_locks

?
1
desc information_schema.innodb_locks;

MySQL中出现lock wait timeout exceeded问题及解决

innodb_lock_waits

?
1
desc information_schema.innodb_lock_waits

MySQL中出现lock wait timeout exceeded问题及解决

3、终极方法

如果以上方法杀掉线程,但还是不能解决,则我们就可以查找执行线程用时比较久的用户,然后直接干掉。

?
1
2
SELECT * from information_schema.`PROCESSLIST` WHERE Time > 1000 AND USER = 'wonguser' ORDER BY TIME desc;
kill 740097562

这样把所有耗时比较久的任务干掉,就可以解决这个问题了。

4、总结一下

关于我的那个问题,我通过这个方法 select * from information_schema.innodb_trx 已经杀掉了线程,但通过表直接修改那个id对应的数据,还是会弹出Lock wait timeout exceeded; try restarting transaction这样的异常,在网上找了许多未找出具体的解决方法,后来自己灵光一现,可以找出那些好事比较久的线程,然后把那些可疑的线程杀掉,没想到这个问题就解决了,可以正常对这行数据进行操作了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://liudada.blog.csdn.net/article/details/122054681

延伸 · 阅读

精彩推荐
  • Mysqlmysql ERROR 1045 (28000)问题的解决方法

    mysql ERROR 1045 (28000)问题的解决方法

    这篇文章主要介绍了mysql ERROR 1045 (28000)问题的解决方法,文中步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    weixin_416886195262020-12-10
  • MysqlMySQL 聚合函数排序

    MySQL 聚合函数排序

    这篇文章主要介绍了MySQL查询排序与查询聚合函数用法,结合实例形式分析了MySQL查询结果排序以及查询聚合函数相关使用技巧,需要的朋友可以参考下...

    宁在春9332021-09-01
  • Mysqlmysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令导入导出数据库方法与实例汇总

    这篇文章主要介绍了mysqldump命令导入导出数据库方法与实例汇总的相关资料,需要的朋友可以参考下 ...

    MYSQL教程网2802020-05-20
  • MysqlMySQL索引用法实例分析

    MySQL索引用法实例分析

    这篇文章主要介绍了MySQL索引用法,结合实例形式较为详细的分析了mysql索引的功能、定义、使用方法与相关注意事项,需要的朋友可以参考下...

    miky3722020-06-17
  • MysqlMySQL group by语句如何优化

    MySQL group by语句如何优化

    这篇文章主要介绍了MySQL group by语句如何优化,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下...

    AsiaYe7812021-03-02
  • MysqlMySQL中开启和使用通用查询日志的实例教程

    MySQL中开启和使用通用查询日志的实例教程

    这篇文章主要介绍了MySQL中开启和使用通用查询日志的实例教程,包括其备份和关闭等基础操作的例子讲解,需要的朋友可以参考下 ...

    沙弥的世界1532020-05-28
  • MysqlCentOS 7.4 64位安装配置MySQL8.0的详细步骤

    CentOS 7.4 64位安装配置MySQL8.0的详细步骤

    本文分步骤给大家介绍了CentOS 7.4 64位安装配置MySQL8.0 的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    幕三少4762020-09-07
  • Mysqlmysql 行列动态转换的实现(列联表,交叉表)

    mysql 行列动态转换的实现(列联表,交叉表)

    下面小编就为大家带来一篇mysql 行列动态转换的实现(列联表,交叉表)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看...

    mysql教程网7182020-07-08