ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction解决
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,一、问题描述:同事反馈线上一个表有其中一条数据无法删除,其他都正常,我拿到删数据的sql,尝试执行,报错如下:mysql> delete from facebook_posts where id =
千家信息网最后更新 2025年11月08日ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction解决
一、问题描述:
同事反馈线上一个表有其中一条数据无法删除,其他都正常,我拿到删数据的sql,尝试执行,报错如下:
mysql> delete from facebook_posts where id = 7048962;ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
二、问题处理
从报错信息看,应该是关于这条数据有事物未提交,锁等待超时了,下面我们就开始验证并解决问题
1、在sql执行期间,通过information_schema.innodb_trx表找到这个sql的事物ID(5316933097 )
mysql> select trx_id,trx_started,trx_requested_lock_id,trx_mysql_thread_id,trx_query from information_schema.innodb_trx where trx_query='delete from facebook_posts where id = 7048962';+------------+---------------------+------------------------+---------------------+-----------------------------------------------+| trx_id | trx_started | trx_requested_lock_id | trx_mysql_thread_id | trx_query |+------------+---------------------+------------------------+---------------------+-----------------------------------------------+| 5316933097 | 2017-08-15 07:31:57 | 5316933097:923:24693:6 | 1798850878 | delete from facebook_posts where id = 7048962 |+------------+---------------------+------------------------+---------------------+-----------------------------------------------+1 row in set (0.00 sec)
关于innodb_trx表字段含义的解释:
mysql> desc information_schema.innodb_trx; +----------------------------+---------------------+------+-----+---------------------+-------+| Field | Type | Null | Key | Default | Extra |+----------------------------+---------------------+------+-----+---------------------+-------+| trx_id | varchar(18) | NO | | | |#事务ID| trx_state | varchar(13) | NO | | | |#事物状态| trx_started | datetime | NO | | 0000-00-00 00:00:00 | |#事物开始时间| trx_requested_lock_id | varchar(81) | YES | | NULL | |#事物请求锁ID| trx_wait_started | datetime | YES | | NULL | |#事物开始等待时间| trx_weight | bigint(21) unsigned | NO | | 0 | |#| trx_mysql_thread_id | bigint(21) unsigned | NO | | 0 | |#事物线程ID,即show processlist看到ID| trx_query | varchar(1024) | YES | | NULL | |#具体SQL| trx_operation_state | varchar(64) | YES | | NULL | |#事物当前操作状态| trx_tables_in_use | bigint(21) unsigned | NO | | 0 | |#事物中有多少个表被使用| trx_tables_locked | bigint(21) unsigned | NO | | 0 | |#使用拥有多少个锁| trx_lock_structs | bigint(21) unsigned | NO | | 0 | |#| trx_lock_memory_bytes | bigint(21) unsigned | NO | | 0 | |#事物锁住的内存大小| trx_rows_locked | bigint(21) unsigned | NO | | 0 | |#事物锁住的行数| trx_rows_modified | bigint(21) unsigned | NO | | 0 | |#使用修改的行数| trx_concurrency_tickets | bigint(21) unsigned | NO | | 0 | |#事物并发票数| trx_isolation_level | varchar(16) | NO | | | |#事物隔离级别| trx_unique_checks | int(1) | NO | | 0 | |#是否唯一性检查| trx_foreign_key_checks | int(1) | NO | | 0 | |#是否外键检查| trx_last_foreign_key_error | varchar(256) | YES | | NULL | |#最后的外键错误| trx_adaptive_hash_latched | int(1) | NO | | 0 | |#| trx_adaptive_hash_timeout | bigint(21) unsigned | NO | | 0 | |#| trx_is_read_only | int(1) | NO | | 0 | |#| trx_autocommit_non_locking | int(1) | NO | | 0 | |#+----------------------------+---------------------+------+-----+---------------------+-------+24 rows in set (0.00 sec)
2、通过上面步骤1找到的事物ID,找到占有锁的事物ID(5316888834 )
mysql> select * from information_schema.innodb_lock_waits where requesting_trx_id=5316933097;+-------------------+------------------------+-----------------+------------------------+| requesting_trx_id | requested_lock_id | blocking_trx_id | blocking_lock_id |+-------------------+------------------------+-----------------+------------------------+| 5316933097 | 5316933097:923:24693:6 | 5316888834 | 5316888834:923:24693:6 |+-------------------+------------------------+-----------------+------------------------+1 row in set (0.00 sec)
关于innodb_lock_waits 表的字段含义的解释:
mysql> desc information_schema.innodb_lock_waits;+-------------------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------------------+-------------+------+-----+---------+-------+| requesting_trx_id | varchar(18) | NO | | | |#请求锁的事物ID| requested_lock_id | varchar(81) | NO | | | |#请求锁的锁ID| blocking_trx_id | varchar(18) | NO | | | |#当前拥有锁的事物ID| blocking_lock_id | varchar(81) | NO | | | |#当前拥有锁的锁ID+-------------------+-------------+------+-----+---------+-------+4 rows in set (0.00 sec)
3、通过步骤2找到的占有锁的事物ID,找到占有锁的事物线程ID(1790259884 )
mysql> select * from information_schema.innodb_trx where trx_id=5316888834 \G*************************** 1. row *************************** trx_id: 5316888834 trx_state: RUNNING trx_started: 2017-08-15 06:00:21 trx_requested_lock_id: NULL trx_wait_started: NULL trx_weight: 6 trx_mysql_thread_id: 1790259884 trx_query: NULL trx_operation_state: NULL trx_tables_in_use: 0 trx_tables_locked: 0 trx_lock_structs: 6 trx_lock_memory_bytes: 1184 trx_rows_locked: 10 trx_rows_modified: 0 trx_concurrency_tickets: 0 trx_isolation_level: REPEATABLE READ trx_unique_checks: 1 trx_foreign_key_checks: 1trx_last_foreign_key_error: NULL trx_adaptive_hash_latched: 0 trx_adaptive_hash_timeout: 10000 trx_is_read_only: 0trx_autocommit_non_locking: 01 row in set (0.00 sec)
4、通过步骤3找的事物ID,可以查看下这个事物发起的账号和主机信息,提供给开发人员查找异常的真正原因,并kill这个事物ID,这条数据就可以正常删除了
#查看下这个事物发起的账号和主机信息mysql> select * from information_schema.processlist where ID=1790259884;+------------+----------+---------------------+--------+---------+------+-------+------+| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |+------------+----------+---------------------+--------+---------+------+-------+------+| 1790259884 | spider_w | 172.31.11.143:46120 | db_mta | Sleep | 1319 | | NULL |+------------+----------+---------------------+--------+---------+------+-------+------+1 row in set (0.01 sec)#kill 这个未提交的事物线程IDmysql> CALL mysql.rds_kill(1790259884);Query OK, 0 rows affected (0.00 sec)#删除数据mysql> delete from facebook_posts where id = 7041232;Query OK, 1 row affected (0.02 sec)
事物
数据
信息
步骤
线程
问题
主机
含义
字段
时间
状态
账号
检查
解释
事务
人员
内存
原因
同事
唯一性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界服务器02期
软件开发能干到多少岁
网络安全法学习资料
网络安全五年发展
保时捷 软件开发
守望先锋显示服务器连接错误
崇明区网络软件开发信息中心
互联网高科技产业基地
黎明杀机服务器更换
美国上市网络安全公司估值
中国企业与产品数据库
cms模板换数据库
打开pks后没有服务器连接
泰拉瑞亚1.4普通服务器ip地址
企业网络安全管理员需要什么
山西学校触控拍照软件开发公司
如何提升网络安全等级
网络安全管理制度的意义
肇庆信息软件开发咨询
如何将数据输入数据库表中
北京嵌入式软件开发简历
网络安全的童诗童谣五十字
方舟k6服务器
排查数据库批量操作数据
数据库查询历史事件
成都工行软件开发中心工资如何
mysql的数据库关系图
维姆服务器升级
软件开发专业技能怎么写
应届生能做软件开发吗