1.死锁的概念

死锁:死锁一般是事务相互等待对方资源,最后形成环路造成的。

对于死锁,数据库处理方法:牺牲一个连接,保证另外一个连接成功执行。

发生死锁会返回ERROR:1213 错误提示,大部分的死锁InnoDB存储引擎本身可以侦测到,不需要人为进行干预。

注意:

InnoDB存储引擎并不会回滚大部分的错误异常,像阻塞章节里面的例子,但是死锁例外,发现死锁后,InnoDB存储引擎会马上回滚一个事务,会返回1213错误。

2.死锁的情形举例:

eg1:

步 骤

事务1

事务2

1

begin;

begin;

2

delete from info_area where id=1;

3

update info_users set mobile='18514656666' where mobile='18514656620';

4

update info_users set mobile='18514656666' where mobile='18514656620';

5

delete from info_area where id=1;

分析死锁日志:

第一部分

从日志里我们可以看到事务1当前正在执行update info_users set mobile='18514656666' where mobile='18514656620',该条语句正在申请表info_users的索引IDX_MOBILE的X锁,所以提示lock_mode X waiting

第二部分:

然后日志的下半部分说明了事务2当前‘持有的锁’以及‘等待的锁’:

从日志的HOLDS THE LOCKS(S)块中我们可以看到事务2持有索引IDX_MOBILE的X锁,并且是记录锁(Record Lock)。该锁是通过事务2在步骤2执行的update语句申请的。

从日志的WAITING FOR THIS LOCK TO BE GRANTED块中我们可以看到事务2正在申请持有表info_area的索引GEN_CLUST_INDEX的X锁,该锁是delete from info_area where id=1;语句申请的。

eg2:

步骤

事务1

事务2

1

begin;

begin;

2

update info_users set name=’aaa’ where id=1;

3

update info_users set name='bbb' where id=2;

4

update info_users set name='bbb' where id=2;

5

update info_users set name=’aaa’ where id=1;

eg3:

步骤

事务1

事务2

1

begin;

begin;

2

DELETE from users where uid='bbb';执行成功

3

DELETE from users where uid='bbb';等待

4

ERROR 1213 (40001)

insert INTO users VALUES(2,'bbb'); 成功

分析死锁日志:

第一部分

从日志里我们可以看到事务1当前正在执行DELETE from users where uid='bbb';,该条语句正在申请索引UID的X锁,所以提示lock_mode X waiting

第二部分:

然后日志的下半部分说明了事务2当前‘持有的锁’以及‘等待的锁’:

从日志的HOLDS THE LOCKS(S)块中我们可以看到事务2持有索引UID的X锁,并且是记录锁(Record Lock)。该锁是通过事务2在步骤2执行的delete语句申请的。

从日志的WAITING FOR THIS LOCK TO BE GRANTED块中我们可以看到事务2正在申请持有索引UID的S锁,该锁是insert INTO users VALUES(2,'bbb');语句申请的。insert语句在普通情况下是会申请X锁,但是这里出现了S锁。这是因为uid字段是一个唯一索引,所以insert语句会在插入前进行一次duplicate key的检查,为了使这次检查成功,需要申请S锁防止其他事务对uid字段进行修改。

那么为什么该S锁会失败呢?这是对同一个字段的锁的申请是需要排队的。S锁前面还有一个未申请成功的X锁,所以S锁必须等待,所以形成了循环等待,死锁出现了。

通过阅读死锁日志,我们可以清楚地知道两个事务形成了怎样的循环等待,再加以分析,就可以逆向推断出循环等待的成因,也就是死锁形成的原因。

查看mysql数据库的死锁日志_【MySQL】mysql死锁以及死锁日志分析相关推荐

  1. MySQL数据库实用教程考核_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠【pdf】...

    内容简介 郑明秋.蒙连超.赵海侠主编的<MySQL数据库实用教程>是作者在多年的数据库开发实践与教学经验的基础上,根据计算机相关专业的职业岗位能力需求及学生的认知规律倾心组织编写的.本教材 ...

  2. MySQL数据库test连接语句_【MySQL数据库开发之二】MySQL 基础语句的书写与操作!...

    本篇Himi简单介绍一些MySQL数据库的基础操作: 注:mysql 语句对大小写不敏感,语句以分号";"标识语句结束: 1.   首先使用两个简单的查询语句: 查询当前版本:se ...

  3. mysql 数据库还原 不齐_请教mysql数据库还原问题。

    你的位置: 问答吧 -> 数据库 -> 问题详情 请教mysql数据库还原问题. 50多m,能不能拆分?上传到服务器上总是超时.怎么办? [ 本帖最后由 geniux 于 2007-9-2 ...

  4. mysql数据库密码为空_注意MySQL数据库用户root密码为空

    注意MySQL数据库用户root密码为空 文章作者:网友投稿 发布时间:2008-08-14 19:11:51 来源:网络 看到这大家肯定知道了,就是利用mysql输出一个可执行的文件而已.为什么不用 ...

  5. mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. ...

  6. mysql数据库密码为空_注意MySQL 数据库用户root密码为空_MySQL

    这篇文章着重介绍了MySQL数据库用户root密码为空的另类攻击方法,更多内容请参考下文: 1.连接到对方mysql 服务器 mysql -u root -h 192.168.0.1 mysql.ex ...

  7. MySQL数据库肖睿版_正版 MySQL数据库应用技术及实战肖睿MySQL数据库数据操作数据恢复备份MySQL数据库优化My...

    基本信息 书名:MySQL数据库应用技术及实战 定价:32.00元 作者:肖睿程宁田崇峰 出版社:人民邮电出版社 出版日期:2018-01-01 ISBN:9787#115474223 字数: 页码: ...

  8. 收集关于MySQL数据库的相关知识_关于Mysql数据库的知识总结

    2017年6月8日,天气阴.心情晴. 连续做梦两个晚上了,昨晚竟然梦见一个很长时间不联系的初中同学了,早上上班的路上聊了聊.女孩现在出差在贵州,风景秀美的地方.我说"你现在生活很滋润&quo ...

  9. mysql数据库怎么插入时间_给mysql数据库插入当前时间

    mysql相关的三个函数有: NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中. CURDATE()以'YYYY-MM-DD'的格式返 ...

  10. mysql数据库开启远程连接_安装MySQL数据库并开启远程访问

    一.安装MySQL数据库 MySQL安装在系统盘下(C:\Program Files),方便系统备份. 1.双击安装程序,勾选"I accept the license terms" ...

最新文章

  1. extern “C“
  2. SUN平台,光纤共享存储互斥失败导致的数据灾难恢复
  3. What is Type in managed heap?
  4. Android组件之BroadCast简单实践
  5. 七、Excel中图表制作和展示
  6. webview键盘自适应_黑爵毛茸茸机械键盘:感受来自治愈系的暖萌
  7. 如何获取类(接口)的成员
  8. 转 基于.NET平台的分层架构实战
  9. python27的Windows下环境搭建
  10. linux锐捷认证成功无法上网,如何修复win7系统锐捷认证成功但是却无法上网的操作教程...
  11. 配电站房可视化巡检智能监控系统
  12. openwrt折腾记2-广告拦截adbyby与pass
  13. 2023年入学华东师范大学MBA提前面试流程及时间-文都管联院
  14. tftp工作流程计算机网络,tftpd32使用方法,[转载]利用GhostSrv+Tftpd32网络克隆攻略
  15. Windows远程桌面连接Mac OS X
  16. 14- I、 剪绳子(cuttingRope)
  17. 【编程笔试】美团2021校招笔试-通用编程题第9场(附思路及C++代码)
  18. 调用MapReduce对文件各个单词出现的次数进行统计
  19. 基于采样的规划算法之RRT家族(三):RRT*
  20. 印度IT业迎来新生:大数据催生大批分析公司

热门文章

  1. (原创)网吧桌面背景添加文字,转载注明出处!
  2. DataGridView数据导入到Excel 中
  3. 第二届(2009年)中国信息技术应用学术研讨会征文延期通知
  4. 在.net 2.0 中执行分布式事务:隐式事务篇(SQL Server 与 Oracle)
  5. [剑指offer][JAVA]面试题第[18]题[删除链表的节点]
  6. CodeForces - 766C - Mahmoud and a Message dp
  7. POJ 2533 Longest Ordered Subsequence 动态规划
  8. python ssh脚本_ssh爆破(python脚本)
  9. python判断字母数字_Python判断字符串是否为字母或者数字(浮点数)的多种方法
  10. usb接口多少钱_工控机一般有多少个串口