# 如何实现MySQL InnoDB死锁
## 引言
作为一名经验丰富的开发者,我们经常会遇到数据库死锁的问题。死锁是指两个或多个事务互相等待对方释放资源而无法继续执行的情况。MySQL的InnoDB引擎提供了一些方法来模拟和解决死锁问题。在本文中,我将展示如何实现MySQL InnoDB死锁,并向你解释每一步需要做什么。
## 流程步骤
下面是整个实现过程的流程步骤。我们将使用两个会话模            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-08-11 05:57:32
                            
                                33阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            如果遇到死锁了,怎么解决呢?找到原始的锁ID,然后KILL掉一直持有的那个线程就可以了, 但是众多线程,可怎么找到引起死锁的线程ID呢? MySQL 发展到现在,已经非常强大了,这个问题很好解决。 直接从数据字典连查找。 我们来演示下。线程A,我们用来锁定某些记录,假设这个线程一直没提交,或者忘掉提交了。 那么就一直存在,但是数据里面显示的只是SLEEP状态。&nbs            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-15 18:16:13
                            
                                225阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            实验分析死锁信息            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2016-12-20 23:54:16
                            
                                3866阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            写的很不错,收藏并分享之 http://hi.baidu.com/baiduqa/blog/item/c53b8c95663afd7855fb9697.html             
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                            精选
                                                        
                            2012-05-11 10:27:40
                            
                                2153阅读
                            
                                                        
                                点赞
                            
                                                                                    
                                1评论
                            
                                                 
                 
                
                             
         
            
            
            
            1、概览  在实际工作过程中遇到了数据库死锁的问题,在查阅资料的时候遇到了各种锁的概念。   共享锁、排它锁、表级锁、行级锁、记录锁、间隙锁、临键锁、插入意向锁、自增锁等等等等,这些概念如果能够弄清楚其中区别自然最好,但理清这些概念是在是太麻烦了。而且从实际工作情况出发,理清这些概念再去解决实际的工作问题效率太低。   所以我这里基于MySQL数据库的Innodb引擎(注意是MySQL数据库的In            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-29 22:53:37
                            
                                88阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、先了解下innodb锁机制,实现原理:InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁! 索引分为主键索引和二级索引两种,如果一条sql语句操作了主键索引,MySQL就会锁定这条主键索引;如果一            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-25 20:53:15
                            
                                237阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
                    死锁不属于mysql的锁,死锁指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。若无外力作用,它们都将无法推进下去。形成原因新建student表CREATE TABLE `student` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(16)            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-09 13:13:00
                            
                                271阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            本文中数据库是mysql,使用InnoDB引擎。Deadlock found when trying to get lock; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-02 09:16:29
                            
                                87阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            死锁只发生在并发的情况,也就是说你的程序是串行的是不可能发生死锁。通常表现为两个事务都在等待某个资源可用而无法继续进行,因为每个事务都持有另一个事务需要的锁,而它们都不会释放所持有的锁。为此,InnoDB引擎有一个后台的锁监控线程,它负责查看可能的死锁问题,并自动告知用户。可以通过 innodb_deadlock_detect 配置选项禁用死锁检测,innodb还提供了innodb_lock_wa            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-04-02 15:21:53
                            
                                317阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            案            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-12-27 18:50:32
                            
                                150阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            通过MVCC和锁来支持事务的隔离性,控制并发安全性,Innodb提供8种锁。Innodb的锁可以按照两个维度进行划分,根据可以根据锁的粒度将innodb分为行锁和表锁,根据锁之间的兼容性可以分为共享锁(S)和排它锁(X)。 按照锁粒度对Inndb中锁进行划分:在表锁和行锁中都存在共享锁和排它锁,表锁中共享锁/排它锁加锁方式: LOCK TABLES table_name write/read; 行            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-13 02:16:29
                            
                                84阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # 如何查看MySQL死锁
## 1. 流程图
```mermaid
flowchart TD
    A(开始)
    B(连接到MySQL数据库)
    C(执行SHOW ENGINE INNODB STATUS)
    D(获取死锁信息)
    E(分析死锁信息)
    F(结束)
    A --> B --> C --> D --> E --> F
```
## 2. 连            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-01-08 04:10:38
                            
                                277阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            案例描述      在定时脚本运行过程中,发现当备份表格的sql语句与删除该表部分数据的sql语句同时运行时,mysql会检测出死锁,并打印出日志。两个sql语句如下:      (1)insert into backup_table select * from source_table      (2)DELETE FROM source_table WHERE Id>5 AND            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-07-30 14:22:45
                            
                                208阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 优雅检测MySQL InnoDB死锁方案
## 1. 背景
在使用MySQL的InnoDB存储引擎时,由于并发访问的特性,可能会出现死锁的情况。当两个或多个事务相互等待对方释放锁资源时,就会形成死锁。为了提高项目的稳定性和性能,我们需要优雅地检测死锁并进行处理。
## 2. 解决方案
### 2.1 使用InnoDB存储引擎的锁信息
MySQL提供了一些视图和语句来查看InnoDB存            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-04-25 03:43:45
                            
                                32阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            先贴上案例信息吧:*** (1) TRANSACTION:
TRANSACTION 52EDC5761, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 1248, 2 row lock(s)
MySQL thread id 34815573, OS thre            
                
                    
                        
                                                            
                                                                        
                                                                推荐
                                                                                        原创
                                                                                    
                            2013-10-16 22:54:01
                            
                                3787阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            线上经常偶发死锁问题,当时处理一张表,也没有联表处理,但是有两个mq入口,并且消息体存在一样的情况,频率还不是很低,这么一个背景,我非常容易怀疑到,两个消息同时近到这一个事务里面导致的,但是是偶发的,又模拟不出来什么场景会导致死锁,只能利用自己有限的知识分析业务代码简化成下面也就是说先update ,select , insert 这么一个顺序表中存在dm_code ,erp 唯一索引。            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-02-13 09:18:24
                            
                                156阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            对于死锁的处理,InnoDB存储引擎会检测到死锁后,会选择一个事务作为死锁的牺牲者,将其回滚来解决死锁。InnoDB            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-12-10 08:33:22
                            
                                63阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            MySQL的nnoDB锁机制 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁。行级锁与表级锁本来就有许多不同之处,innodb正常的select ID from table where id=1;不会上任何锁,接下来详细讨论InnoDB的锁问题;            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-03-06 15:42:00
                            
                                142阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
             
MySQL Innodb表死锁情况分析与归纳(转载)
burgess | 2012 年 4 月 11 日
案例描述
      在定时脚本运行过程中,发现当备份表格的sql语句与删除该表部分数据的sql语句同时运行时,mysql会检测出死锁,并打印出日志。
  &n            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                            精选
                                                        
                            2013-04-12 10:23:21
                            
                                728阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            建表:CREATE TABLE `t01` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`a` varchar(45) NOT NULL COMMENT '',
`b` varchar(45) NOT NULL COMMENT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                            精选
                                                        
                            2014-04-11 22:41:17
                            
                                585阅读