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

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

服务器之家 - 数据库 - Mysql - Mysql查看死锁与解除死锁的深入讲解

Mysql查看死锁与解除死锁的深入讲解

2021-03-13 18:390xBoo Mysql

这篇文章主要给大家介绍了关于Mysql查看死锁与解除死锁的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

前段时间遇到了一个mysql 死锁相关的问题,整理一下。

问题描述:mysql 的修改语句似乎都没有生效,同时使用mysql gui 工具编辑字段的值时会弹出异常。

Mysql查看死锁与解除死锁的深入讲解

什么是死锁

在解决mysql 死锁的问题之前,还是先来了解一下什么是死锁。

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程。

死锁的表现

死锁的具体表现有两种:

mysql 增改语句无法正常生效 使用mysql gui 工具编辑字段的值时,会出现异常。 如何避免死锁

阻止死锁的途径就是避免满足死锁条件的情况发生,为此我们在开发的过程中需要遵循如下原则:

1.尽量避免并发的执行涉及到修改数据的语句。

2.要求每一个事务一次就将所有要使用到的数据全部加锁,否则就不允许执行。

3.预先规定一个加锁顺序,所有的事务都必须按照这个顺序对数据执行封锁。如不同的过程在事务内部对对象的更新执行顺序应尽量保证一致。

查看死锁

mysql 查询是否存在锁表有多种方式,这里只介绍一种最常用的。

1. 查看正在进行中的事务

?
1
select * from information_schema.innodb_trx

可以看到 进程id为3175 的事务在锁住了,而另一个id为3173的事务正在执行,但是没有提交事务。

Mysql查看死锁与解除死锁的深入讲解

2. 查看正在锁的事务

?
1
select * from information_schema.innodb_locks;

Mysql查看死锁与解除死锁的深入讲解

3. 查看等待锁的事务

?
1
select * from information_schema.innodb_lock_waits;

Mysql查看死锁与解除死锁的深入讲解

4. 查询是否锁表

?
1
show open tables where in_use > 0;

Mysql查看死锁与解除死锁的深入讲解

在发生死锁时,这几种方式都可以查询到和当前死锁相关的信息。

5. 查看最近死锁的日志

?
1
show engine innodb status

Mysql查看死锁与解除死锁的深入讲解

解除死锁

如果需要解除死锁,有一种最简单粗暴的方式,那就是找到进程id之后,直接干掉。

查看当前正在进行中的进程

?
1
2
3
4
show processlist
 
// 也可以使用
select * from information_schema.innodb_trx;

这两个命令找出来的进程id 是同一个。

杀掉进程对应的进程 id

?
1
kill id

验证(kill后再看是否还有锁)

?
1
show open tables where in_use > 0;

参考链接

mysql 查看表和解锁表

mysql 死锁是什么?

到此这篇关于mysql查看死锁与解除死锁的文章就介绍到这了,更多相关mysql查看死锁与解除死锁内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://segmentfault.com/a/1190000038352601

延伸 · 阅读

精彩推荐
  • MysqlMySQL中主键为0与主键自排约束的关系详解(细节)

    MySQL中主键为0与主键自排约束的关系详解(细节)

    这篇文章主要给大家介绍了关于MySQL中主键为0与主键自排约束的关系的相关资料,主要介绍的是其中的一些非常细的细节,对大家学习或者使用mysql具有一...

    汪凡3962020-09-01
  • MysqlMySQL配置SSL主从复制

    MySQL配置SSL主从复制

    本文给大家分享的是如何给mysql配置SSL主从复制的具体方法,分别给出了5.6和5.7两个版本的实例,希望大家能够喜欢...

    浮生凤年5622019-06-12
  • Mysql浅谈MySQL 统计行数的 count

    浅谈MySQL 统计行数的 count

    这篇文章主要介绍了MySQL 统计行数的 count的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    以终为始9612021-01-22
  • Mysqlmysql使用GROUP BY分组实现取前N条记录的方法

    mysql使用GROUP BY分组实现取前N条记录的方法

    这篇文章主要介绍了mysql使用GROUP BY分组实现取前N条记录的方法,结合实例形式较为详细的分析了mysql中GROUP BY分组的相关使用技巧,需要的朋友可以参考下...

    yiluoAK_4718492020-06-15
  • MysqlMySQL DeadLock故障排查全过程记录

    MySQL DeadLock故障排查全过程记录

    这篇文章主要给大家介绍了关于MySQL DeadLock故障排查的全过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    携程DBA9782019-06-11
  • Mysqlmysql source 命令导入大的sql文件的方法

    mysql source 命令导入大的sql文件的方法

    本文将详细介绍mysql source 命令导入大的sql文件的方法;需要的朋友可以参考下 ...

    MYSQL教程网10962019-12-11
  • MysqlMySQL PHP语法浅析

    MySQL PHP语法浅析

    在本篇文章里小编给大家分享了关于MySQL PHP语法的相关知识点,需要的朋友们学习参考下。...

    laozhang6512019-06-05
  • MysqlCentOS下编写shell脚本来监控MySQL主从复制的教程

    CentOS下编写shell脚本来监控MySQL主从复制的教程

    这篇文章主要介绍了在CentOS系统下编写shell脚本来监控主从复制的教程,文中举了两个发现故障后再次执行复制命令的例子,需要的朋友可以参考下 ...

    dngood4442020-05-26