MySQL数据库执行Update卡死问题的解决方法

目录
  • 问题分析
  • 解决办法
  • 过程复现和解决
  • 扩展
  • 总结

执行数据库更新update操作的时候数据库卡死了

问题分析

一般都是数据库事务未提交,导致update或者delete卡死。

解决办法

  1. 在执行完更新或删除后,记得将事务提交commit;
  2. 找到数据库客户端,执行commit操作。

如果还不行。 那么应该是数据库在执行数据操作失败 or 事务未提交 之后,将需要执行的sql语句锁死了。

过程复现和解决

通过如下命令查看数据库的自动提交状态

show variables like 'autocommit';

通过SQL设置数据库自动自动提交为关闭

-- on为开启,off为关闭
set autocommit=off;
-- 或者1为开启,0为关闭
set autocommit=0;

表中数据如下:

打开两个窗口分别执行update操作

update car set color ='银色' where id = 1;
update car set color ='红色' where id = 1;

查询正在执行的事务:

SELECT * FROM information_schema.INNODB_TRX;

根据图中事务的线程ID(trx_mysql_thread_id)可以看出对应的mysql 线程:一个1084 (update正在等待锁)另一个是1089(update 正在执行 没有提交事务)

可以使用mysql命令杀掉线程:kill 线程id

kill 1089;

期间如果并未杀掉持有锁的线程:则第二个update语句会提示等待锁超时。

相关命令:

-- 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

-- 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-- 查询mysql数据库中存在的进程
select * from information_schema.`PROCESSLIST`(show processlist;)

扩展

oracle的操作方式:

查询锁定记录

SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid; 

删除锁定记录

ALTER system KILL session 'SID,serial#'; 

总结

到此这篇关于MySQL数据库执行Update卡死问题解决的文章就介绍到这了,更多相关MySQL执行Update卡死内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL中一条update语句是如何执行的

    目录 前言 前期准备 SQL语句的执行过程

  • MySQL将select结果执行update的实例教程

    一.单表查询->更新 UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause] 二.多表联合查询->更新 UPDATE a INNER JOIN (SELECT yy FROM b) c ON a.id = c.id SET a.xx = c.yy [WHERE Clause] 上面的 INNER JOIN ,可以换为 LEFT JOIN . RIGHT JOIN 等联合查询. SET 后的字段必须为 a

  • MySQL执行update语句和原数据相同会再次执行吗

    背景 本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗? 测试环境 MySQL5.7.25 Centos 7.4 binlog_format为ROW 参数 root@localhost : (none) 04:53:15> show variables like 'binlog_row_image'; +------------------+-------+ | Variable_name | Value | +------

  • mysql update语句的执行过程详解

    以前有过一篇关于MySQL查询语句的执行过程,这里总结一下update语句的执行过程.由于update涉及到数据的修改,所以,很容易推断,update语句比select语句会更复杂一些. 1,准备 创建一张test表 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) NOT NULL DEFAULT '0' COMMENT '数值', PRIMARY KEY (`id`) ) ENGINE=InnoDB

  • MySQL数据库执行Update卡死问题的解决方法

    目录 问题分析 解决办法 过程复现和解决 扩展 总结 执行数据库更新update操作的时候数据库卡死了 问题分析 一般都是数据库事务未提交,导致update或者delete卡死. 解决办法 在执行完更新或删除后,记得将事务提交commit; 找到数据库客户端,执行commit操作. 如果还不行. 那么应该是数据库在执行数据操作失败 or 事务未提交 之后,将需要执行的sql语句锁死了. 过程复现和解决 通过如下命令查看数据库的自动提交状态 show variables like 'autocom

  • mysql 5.7更改数据库的数据存储位置的解决方法

    随着MySQL数据库存储的数据逐渐变大,已经将原来的存储数据的空间占满了,导致mysql已经链接不上了.因此,必须要给存放的数据换个地方了.下面是操作过程中的一些步骤.记下来,以后日后查看. 1.修改mysql数据存放的目录 要修改两个地方,其一是修改/etc/my.cnf文件中的datadir.默认情况下: datadir=/var/lib/mysql 因为我的/data/目录比较大,所以将其改为: datadir=/data/mysql/ 还要修改/etc/init.d/mysqld文件,将

  • 教你解决往mysql数据库中存入汉字报错的方法

    一.遇到的问题 在向数据库中存入汉字时遇到这样的问题: Cause: java.sql.SQLException: Incorrect string value: '\xE6\x9F\xAF\xE5\x8D\x97' for column 'user_name' at row 1 二.分析问题 这是由于数据库设计有问题导致的,当初创建数据库的时候直接选择的默认,没有修改为utf-8,后来尝试手动修改还是不行. 尝试把数据库和表的默认字段改为utf8,但是还是不能存汉字. 三.真正的问题 真正的问

  • MySQL定时任务不能正常执行的原因分析及解决方法

    目录 前言 原因分析及解决方法 让定时任务快速执行 总结 前言 在使用数据库定时任务时,常常会出现定时任务不执行的问题,现对该问题出现的原因及解决方案做一些分析和整理. 原因分析及解决方法 当我们发现MySQL的定时任务没有执行时,首先去定时任务中查看[上次运行]时间是否正确,判断其是否正常执行,如果正常执行则需要考虑是否是事件逻辑不正确. 如果上次运行时间为空或者不正确,则需要查看数据库是否打开了定时任务,通过执行下列查询语句进行查询 show VARIABLES like '%event_s

  • Navicat Premium操作MySQL数据库(执行sql语句)

    一. Navicat 简介 1. 什么是Navicat ? Navicat是一个强大的MySQL数据库管理和开发工具.Navicat为专业开发者提供了一套强大的足够尖端的工具,但它对于新用户仍然是易于学习.Navicat,使用了极好的图形用户界面(GUI),可以让你用一种安全和更为容易的方式快速和容易地创建.组织.存取和共享信息.用户可完全控制 MySQL 数据库和显示不同的管理资料,包括一个多功能的图形化管理用户和访问权限的管理工具,方便将数据从一个数据库移转到另一个数据库中(Local to

  • 5分钟快速了解数据库死锁产生的场景和解决方法

    前言 加锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制.任何事务都需要获得相应对象上的锁才能访问数据,读取数据的事务通常只需要获得读锁(共享锁),修改数据的事务需要获得写锁(排他锁).当两个事务互相之间需要等待对方释放获得的资源时,如果系统不进行干预则会一直等待下去,也就是进入了死锁(deadlock)状态. 以下内容适用于各种常见的数据库管理系统,包括 Oracle.MySQL.Microsoft SQL Server 以及 PostgreSQL 等. 死锁是如何产生

  • MySql 修改密码后的错误快速解决方法

    设置好密码后,使用数据库时出现如下错误: ERROR 1820 (HY000): You must reset your password using ALTER USER statement befo re executing this statement. You must SET PASSWORD before executing this statement的解决方法 今天在MySql5.6操作时报错:You must SET PASSWORD before executing this

  • mysql安装时出现各种常见问题的解决方法

    小编为大家整理许多mysql安装时出现各种常见问题的解决方法,供大家参考,具体内容如下 问题一: 当各位在安装.重装时出现could not start the service mysql error:0 原因: 卸载mysql时并没有完全删除相关文件和服务,需要手动清除. 安装到最后一步execute时不能启动服务的解决方法: 首先,在管理工具->服务里面将MySQL的服务给停止(有的是没有安装成功,有这个服务,但是已经停止了的),win+R->cmd,打开命令提示符窗口,输入命令:sc d

  • C3P0连接池+MySQL的配置及wait_timeout问题的解决方法

     一.配置环境 spring4.2.4+mybatis3.2.8+c3p0-0.9.1.2+Mysql5.6.24 二.c3p0的配置详解及spring+c3p0配置 1.配置详解 官方文档 : http://www.mchange.com/projects/c3p0/index.html <c3p0-config> < default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> <property

  • 详解MySQL主键唯一键重复插入解决方法

    目录 解决方案: 1. IGNORE 2. REPLACE 3. ON DUPLICATE KEY UPDATE 我们插入数据的时候,有可能碰到重复数据插入的问题,但是这些数据又是不被允许有重复值: CREATE TABLE stuInfo ( id INT NOT NULL COMMENT '序号', name VARCHAR(20) NOT NULL DEFAULT '' COMMENT '姓名', age INT NOT NULL DEFAULT 0 COMMENT '年龄', PRIMA

随机推荐