Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL删除了记录发现不生效?可能是这个原因

MySQL删除了记录发现不生效?可能是这个原因

作者头像
AsiaYe
发布于 2019-11-20 07:10:32
发布于 2019-11-20 07:10:32
2.1K00
代码可运行
举报
文章被收录于专栏:DBA随笔DBA随笔
运行总次数:0
代码可运行

线上的一次MySQL事务问题记录

上周五进行了一个大表删除的操作,在删除的过程中,出现了一点小问题,白白花费了两个小时,我这里记录了一下大概的过程,废话不多说了,直接看过程吧。

当时想进行删除,先测试了一下删除语句的语法,删了一条试了一下,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql ::>>select min(id) from XXXX_user_login;
+---------+
| min(id) |
+---------+
|     |
+---------+
 row in set (0.00 sec)

mysql  ::>>delete from XXXX_user_login where id < ;
Query OK,  row affected (0.00 sec)

mysql  ::>>select min(id) from XXXX_user_login;                 
+---------+
| min(id) |
+---------+
|     |
+---------+
 row in set (0.00 sec)

然后重新使用mysql客户端登录进去,发现了一个奇怪的问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dba_mysql ~]$ /usr/local/mysql/bin/mysql -udba_admin -p -h127.0.0.1 -P4306
Enter password: 
XXXXXXXXXXXXXXXXXXXXXX
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql  ::>>select min(id) from XXXXX_user_login;                                   
+---------+
| min(id) |
+---------+
|     |
+---------+
 row in set (0.00 sec)

也就是刚才删除掉的那一条记录又重新回来了。

想想觉得挺奇怪的,是不是我删除错了,或者说删除之后,业务方又重新插入了数据,这不是出问题了么。。。又重新试了几次,都是一样的效果。

这个现象很奇怪,之前没有遇到过,我首先是检查了一下脚本,确认删除的脚本无误后,又查了好半天,最后终于从事务的这个方向找到了一个突破口,怀疑是事务没有提交导致的,于是看了一眼当前事务的参数,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql  ::>>show variables like '%commit%';     
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| autocommit                     | OFF   |
| innodb_commit_concurrency      |      |
| innodb_flush_log_at_trx_commit |      |
+--------------------------------+-------+
 rows in set (0.00 sec)

mysql--dba_admin@127.0.0.1:(none) ::>>
mysql  ::>>show global variables like '%commit%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| autocommit                     | ON    |
| innodb_commit_concurrency      |      |
| innodb_flush_log_at_trx_commit |      |
+--------------------------------+-------+
 rows in set (0.00 sec)

看到这个,基本上问题就已经确定了,是因为当前会话中的自动提交被设置成了off,所以删除的时候,貌似已经成功了,重启之后再看,这些事务被回滚了,所以就好像删除操作"失效"一样。

那既然已经定位到了问题,就开始找这个问题的根本原因,最终在配置文件中找到了最根本的原因,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[mysqldump]
quick
max_allowed_packet = M

[mysql]
no-auto-rehash
max_allowed_packet = M
prompt=mysql--\\u@\\h:\\d \\R:\\m:\\s>>
init-command="set interactive_timeout=28800;set wait_timeout=28800;set autocommit=0;"

配置文件中的最后一行,mysql客户端组的配置autocommit被设置成了0,当然就无法自动提交了,于是改了这个参数为1,再次重试脚本,发现问题依旧。。。

看来还是改的不彻底。

我们知道,mysql加载配置文件有一个顺序,我们可以使用mysql --help|grep my.cnf的命令来查看,经过查看,是因为/etc/my.cnf中的配置也是autocommit=0,所以就把当前这个配置文件的参数给覆盖了,最终,改完/etc/my.cnf文件中的autocommit参数内容之后,重新连接mysql服务器,发现问题解决。

总结,下面几个小的知识点需要注意一下:

1、当发现数据无法删除之后,可以先看看事务提交的参数是否设置成了off

2、使用show variables和show global variables可以分别查看当前会话和全局变量的事务参数;

3、my.cnf文件中的mysql组中的参数是用来控制mysql客户端的配置的。

4、my.cnf文件有加载顺序,改动的时候,需要全部都变更。或者保证只存在一个my.cnf文件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
MySQL客户端执行不生效???
今天这篇文章,是之前很早时候线上的一个案例,重新翻看的时候,觉得挺有意思,就再转发一遍。
AsiaYe
2022/07/27
3.5K0
MySQL的存储引擎与日志说明
  类型:ext2 3 4 ,xfs 数据。 不管使用什么文件系统,数据内容不会变化,不同的是,存储空间、大小、速度。
惨绿少年
2019/05/24
1.2K0
MySQL 之配置优化
MySQL参数优化对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系, 优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果。 下面列出了对性能优化影响较大 的主要变量,主要分为连接请求的变量和缓冲区变量
小手冰凉
2020/06/02
2.1K0
mysql存储引擎、事务
MySQL存储引擎介绍 文件系统 操作系统组织和存取数据的一种机制。 文件系统是一种软件。 文件系统类型 ext2  ext3  ext4  xfs 数据 不管使用什么文件系统,数据内容不会变化 不同的是,存储空间、大小、速度 MySQL引擎 可以将MySQL引擎理解为:MySQL的“文件系统”,只不过功能更加强大。 MySQL引擎的功能 除了可以提供基本的存取功能,还有更多功能事务功能、锁定、备份和恢复、优化以及特殊功能。 MySQL 提供以下存储引擎: – InnoDB – MyISAM – MEMOR
863987322
2018/03/29
1.7K0
mysql存储引擎、事务
Mysql优化
1 . 优化不总是对一个单纯的环境进行!还很可能是一个复杂的已投产的系统。优化手段本来就有很大的风险,只不过你没能力意识到和预见到!
iginkgo18
2021/06/21
1.5K0
Mysql优化系列(1)--Innodb引擎下mysql自身配置优化
1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。 2.之所以选用innodb作为存储引擎的
洗尽了浮华
2018/01/23
2.6K0
MySQL 锁机制和事务
InnoDB存储引擎支持行级锁 其大类可以细分为共享锁和排它锁两类 共享锁(S):允许拥有共享锁的事务读取该行数据。当一个事务拥有一行的共享锁时,另外的事务可以在同一行数据也获得共享锁,但另外的事务无法获得同一行数据上的排他锁
星哥玩云
2022/08/17
8580
MySQL 锁机制和事务
MySQL 中的事务控制机制
事务控制是 MySQL 的重要特性之一。在 MySQL 中,InnoDB 和 NDB Cluster 是常见的事务型存储引擎。
很酷的站长
2023/03/08
1K0
MySQL 中的事务控制机制
mysql主从搭建
# 1.原理 master的I/O线程将数据写入binlog中; slave的I/O线程从master的binlog中读取数据,写入自己的Relay_Log_File日志中; slave的SQL线程从Relay_Log_File日志中解析sql,完成数据的复制。 # 2.应用场景 从服务器作为主服务器的实时数据备份 主从服务器实现读写分离(主写从读),从服务器实现负载均衡 把多个从服务器根据业务重要性进行拆分访问(从服务器根据业务进行拆分) # 3.master主库配置 修改my.cnf [root@loc
summerking
2022/10/27
3.2K0
MySQL 死锁与日志二三事
最近线上 MySQL 接连发生了几起数据异常,都是在凌晨爆发,由于业务场景属于典型的数据仓库型应用,白天压力较小无法复现。甚至有些异常还比较诡异,最后 root cause 分析颇费周折。那实际业务当中咱们如何能快速的定位线上 MySQL 问题,修复异常呢?下文我会根据两个实际 case,分享下相关的经验与方法。 1、Case1:部分数据更新失败 某天渠道同学反馈某报表极个别渠道数据为 0,大部分渠道数据正常。这个数据是由一个统计程序每天凌晨例行更新的,按理来说,要么全部正常,要么全部失败,那会是什么原因导
用户1177713
2018/02/24
2.9K0
MySQL 死锁与日志二三事
从零开始学mysql - 系统参数和配置
本节我们来讲述关于MYSQL的系统启动命令相关内容,也是比较基础但是可能有些人会很模糊的内容,本节的核心也是讲述配置有关的内容
阿东
2021/12/02
1.9K0
从零开始学mysql - 系统参数和配置
Mysql优化
是否启用mysql查询缓存,可以通过2个参数:query_cache_type和query_cache_size,
码客说
2019/10/22
8590
12种mysql常见错误总结 +分析示例
小伙伴们好,我是阿沐!最近呢,正筹备上云工作,需要考虑到很多场景;比如mongo、mysql、redis、splinx等等迁移工作,这就涉及到版本兼容问题;在迁移之前,阿沐迁移了mysql到其他容器中,发现迁移机器mysql版本号比较高5.7以上,就出现了sql语句兼容问题。所以趁机会整理了很久以前遇到的各种mysql常见问题跟掘金小伙伴们分享下。小伙伴们可以收藏起来哦,遇到常规错误可以快速查询解决~~~
我是阿沐
2021/06/24
2.5K0
MySQL Server has gone away 报错原因汇总版
如果uptime数值很大,表明MySQL服务运行了很久了,说明最近服务没有重启过。如果日志没有相关信息,也说明MySQL服务最近没有重启过,可以继续检查下面几项内容。
阿炳数记
2019/02/27
4.2K0
MySQL数据库innodb_rollback_on_timeout参数
在使用MySQL数据库时,有时会出现ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 这样的报错。而在一个事务中,如果其中一条sql执行时出现此报错,对本事务的其他脚本是否有影响呢,后面如果执行commit操作,报错之前语句的结果是否成功呢?这个结果与隔离级别以及innodb_rollback_on_timeout参数设置有关。
俊才
2020/01/23
3.1K0
MySQL修改wait_timeout变量global生效session不生效
在一次修改MySQL5.7 wait_timeout变量的时候,配置文件增加wait_timeout = 57600参数后,发现一个非常有意思的现象,如下:
Power
2025/03/01
3090
1-MYSQL基础理论知识总结
Q:什么是存储引擎? A:比如一个视频文件可以转成mp4,avi,wmv,而存储进磁盘中也会存在不同类型的文件系统中如linux中的ext3,ext4,xfs等.(直观区别就是占用系统的空间大小与清晰程度可能不一样);
全栈工程师修炼指南
2022/09/28
3860
1-MYSQL基础理论知识总结
全面了解mysql锁机制(InnoDB)与问题排查
MySQL/InnoDB的加锁,一直是一个常见的话题。例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?下面是不同锁等级的区别
蒋老湿
2019/07/31
3.4K0
Mysql日志解析
修改Mysql配置 Mysql配置地址为: C:\Program Files (x86)\MySQL\MySQL Server 5.5 如果无法修改可以把my.ini拷贝出来,修改完后,再拷贝回去! 如果配置了Mysql的日志生成路径,但是该目录尚未创建,那么启动会报错! 关于Mysql日志 splunk内置了两种mysql的日志,分别是mysqld以及mysql_error mysqld_error Standard mysql error log标准的mysql错误日志 050818 16:19:29
用户1154259
2018/01/17
5.1K0
MySQL 8.0 需要调整哪些参数
首先列出一个 8.0 my.cnf 的实例,这个只针对普通的单实例或者主从环境,对于其他环境,比如 MGR,可能有更多的一些参数需要调整。并且也不是最完整,最终要根据自己实际环境进行调整。
数据库交流
2022/06/15
1.9K0
相关推荐
MySQL客户端执行不生效???
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验