一、错误发生及原因猜测

1、错误发生

在删除 t_user 表的一条数据时,Navicat 发生长时间的无响应,然后弹出一个对话框,提示:ERROR 1205: Lock wait timeout exceeded; try restarting transaction

关闭对话框之后,数据并没有被删除。

2、原因猜测

根据错误信息可以知道,是因为锁等待超时导致的错误。那么具体到底是什么原因。

我们知道,InnoDB 引擎是支持事务的。

在使用 begin 或 start transaction 开启事务,进行更新、删除时,会对被操作的行加行级锁。

如果这个事务没有提交,而其他的事务对同一行也进行了更新、删除操作,那么这个事务是不能成功的,至于会不会出现上面的错误,还不确定。

二、错误重现

1、演示环境

操作系统

Windows 7 x64

MySQL版本

MySQL Community Server (GPL) 5.5.56

执行未提交事务的用户

system

查看会话、执行删除操作的用户

root

数据库

test

t_user

 mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
| 1 | a1 |
| 2 | a2 |
| 3 | a3 |
| 4 | a4 |
| 5 | a5 |
| 6 | a6 |
+----+----------+

2、错误重现

使用 A窗口 更新 id = 2 的数据

 mysql> begin;
Query OK, 0 rows affected (0.00 sec) mysql> update t_user set username = 'b1' where id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

在没有提交的情况下,使用 C窗口 查看当前事务,我们可以看到事务的 状态(trx_state)、行锁数(trx_rows_locked)、修改数据行数(trx_rows_modified) 等信息

 mysql> select * from innodb_trx\G;
*************************** 1. row ***************************
trx_id: A023
trx_state: RUNNING
trx_started: 2018-03-11 15:30:19
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 3
trx_mysql_thread_id: 5
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 0
trx_lock_structs: 2
trx_lock_memory_bytes: 376
trx_rows_locked: 1
trx_rows_modified: 1
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 10000

此时再使用 B窗口 删除t_user表的数据,在删除 id = 2 的数据时,发现事务被阻塞。我们在 C窗口 查看 processlist、事务以及锁等待 情况

 mysql> show full processlist;

 mysql> select * from innodb_trx\G;

 mysql> select * from INNODB_LOCK_WAITS\G;

当事务超时后出现1205的错误

此时,我们再查看一下 processlist、事务以及锁等待 情况,发现刚才处于 等待状态 的事务、process和锁等待已经没有了

 mysql> show full processlist;
mysql> select * from INNODB_LOCK_WAITS\G;
mysql> select * from innodb_trx\G;

此时把 A窗口rollback 回来

mysql> rollback;

再查看一下processlist、事务以及锁等待情况

由此可以确定:1205 的错误是因为未提交事务对数据加了行级锁,当前事务获取同一数据行级锁超时导致的

三、解决方案

我们可以使用 show full processlist 查看未提交事务的连接的 id

可以看到这个连接的id是5

如果可以确定不是很重要的事务,我们可以使用kill命令断开这个连接。

mysql> kill 5;

如果不确定的话,还是需要沟通一下如何安全处理。

MySQL的ERROR 1205错误分析的更多相关文章

  1. Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法(MySQL锁表、事物锁表的处理方法)

    Java执行一个SQL查询未提交,遇到1205错误. java.lang.Exception: ### Error updating database.  Cause: java.sql.SQLExc ...

  2. Mysql错误:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

    昨晚添加完索引之后, 查询整表的时候抛出Lock wait timeout exceeded; try restarting transaction, 吓死小白的我, 为什么条件查询可以, 整表查不了 ...

  3. Mysql错误: ERROR 1205: Lock wait timeout exceeded; try restarting transaction

    MySQL:innodb的事务锁,一个线程占用着,简单做法是:执行mysql命令: show full processlist; 然后找出查询语句的系统id:kill掉被锁住的线程id:kill 12 ...

  4. Mysql错误: ERROR 1205: Lock wait timeout exceeded try restarting transaction解决办法

    select * from information_schema.INNODB_TRX;show full processlist;//找出目前连接的列表kill ID//根据ID kill掉

  5. magento后台登陆被锁定 索引报错的解决:General error: 1205 Lock wait timeout

    1. magento在索引的时候用shell,有时候会报错: General error: 1205 Lock wait timeout exceeded 这个时候,是因为行锁的原因,在表中您直接用s ...

  6. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

    测试库一条update语句报错:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction mysql> ...

  7. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction解决办法

    一.问题描述: 同事反馈线上一个表有其中一条数据无法删除,其他都正常,我拿到删数据的sql,尝试执行,报错如下: mysql> delete from facebook_posts where ...

  8. mysql-SQL Error: 1205, SQLState: 41000

    mysql-SQL Error: 1205, SQLState: 41000——CSDN问答频道https://ask.csdn.net/questions/176492 mysql-SQL Erro ...

  9. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 表被锁的解决办法

    转自:https://blog.csdn.net/mchdba/article/details/38313881 前言:朋友咨询我说执行简单的update语句失效,症状如下:mysql> upd ...

随机推荐

  1. Linux 上配置 SQL Server Always On Availability Group

    SQL Server Always On Availability Group 配置步骤:配置三台 Linux 集群节点创建 Availability Group配置 Cluster Resource ...

  2. 除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

    一.背景 今天在计算库存消耗百分比(消耗的库存/总库存)的时候遇到了一个错误,java.lang.ArithmeticException: Non-terminating decimal expans ...

  3. 001-mac搭建Python开发环境、Anaconda、zsh兼容

    一.概述 mac下搭建python环境推荐使用Anaconda+Pycharm. 1.1.Anaconda Anaconda是一个免费开源的Python和R语言的发行版本,用于计算科学(数据科学.机器 ...

  4. 改进初学者的PID-测量的比例介绍

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  5. Spring MVC -- 转换器和格式化

    在Spring MVC -- 数据绑定和表单标签库中我们已经见证了数据绑定的威力,并学习了如何使用表单标签库中的标签.但是,Spring的数据绑定并非没有任何限制.有案例表明,Spring在如何正确绑 ...

  6. [转]Ubuntu18.04下安装搜狗输入法

    鏈接地址:https://blog.csdn.net/lupengCSDN/article/details/80279177

  7. [LeetCode] 262. Trips and Users 旅行和用户

    The Trips table holds all taxi trips. Each trip has a unique Id, while Client_Id and Driver_Id are b ...

  8. 【VS开发】【C/C++开发】memcpy和memmove的区别

    memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下: void *memcpy(void *dst, const void ...

  9. 并行编程架构(指令流水、进程、线程、多核,Pipe and Filter)

    最近在进行DSP软件优化时,查阅文献,看到了几种并行机制,下面予以总结: 关键词一:指令流水 关键词二:多进程 关键词三:多线程 关键词四:多核(多处理器.超线程结构.多核结构.多核超线程架构) 在体 ...

  10. Windows10不能进入睡眠

    问题 有时候暂时不使用计算机(Windows10笔记本),既想省电,又想回来之后快速启动,一般会选择让计算机进入睡眠状态.睡眠状态下,基本上只有内存通电,保存着之前的工作状态,可以快速恢复. 但是最近 ...