mysql的日志怎么清除(MySQL删除了记录不生效的原因排查)
mysql的日志怎么清除
MySQL删除了记录不生效的原因排查线上的一次MySQL事务问题记录
上周五进行了一个大表删除的操作,在删除的过程中,出现了一点小问题,白白花费了两个小时,我这里记录了一下大概的过程,废话不多说了,直接看过程吧。
当时想进行删除,先测试了一下删除语句的语法,删了一条试了一下,如下:
|
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客户端登录进去,发现了一个奇怪的问题:
|
[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) |
也就是刚才删除掉的那一条记录又重新回来了。
想想觉得挺奇怪的,是不是我删除错了,或者说删除之后,业务方又重新插入了数据,这不是出问题了么。。。又重新试了几次,都是一样的效果。
这个现象很奇怪,之前没有遇到过,我首先是检查了一下脚本,确认删除的脚本无误后,又查了好半天,最后终于从事务的这个方向找到了一个突破口,怀疑是事务没有提交导致的,于是看了一眼当前事务的参数,如下:
|
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,所以删除的时候,貌似已经成功了,重启之后再看,这些事务被回滚了,所以就好像删除操作"失效"一样。
那既然已经定位到了问题,就开始找这个问题的根本原因,最终在配置文件中找到了最根本的原因,如下:
|
[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文件。
以上就是MySQL删除了记录不生效的原因排查的详细内容,更多关于MySQL删除了记录不生效的资料请关注开心学习网其它相关文章!
原文链接:https://cloud.tencent.com/developer/article/1541283
- navicat premium连接mysql报错(Navicat连接MySQL错误描述分析)
- mysqlinnodb数据存储格式(MySQL InnoDB ReplicaSet副本集简单介绍)
- mysql存储json的方式(MySQL中查询json格式的字段实例详解)
- mpp数据库的客户端工具(xampp默认mysql数据库root密码的修改)
- mysql中json的支持(MySQL中json字段的操作方法)
- mysql基础操作报告(gorm操作MySql数据库的方法)
- mysql读写分离同步策略(Mysql主从复制与读写分离图文详解)
- mysqltruncate分区自定义参数(MySQL truncate table语句的使用)
- mysql binlog日志位置(开启MySQL的binlog日志的方法步骤)
- mysql建立分区表指令(MySQL高级特性——数据表分区的概念及机制详解)
- django操作默认数据库(Django数据库类库MySQLdb使用详解)
- mysql索引失效原因(MySQL索引失效的几种情况详析)
- mysql实用教程(Mysql调优Explain工具详解及实战演练推荐)
- python怎样读取mysql数据(使用Python将Mysql的查询数据导出到文件的方法)
- mysql各种锁详解(MySQL 查看事务和锁情况的常用语句分享)
- centos系统mysql安装及连接教程(CentOS8安装SQLServer2019的过程)
- 小米推出米兔儿童电话手表奥特曼版,799 元,支持微信 QQ(小米推出米兔儿童电话手表奥特曼版)
- 贾怀胤唱《白龙马》 炸场 了 没想到京剧还能这么玩(贾怀胤唱白龙马)
- 白龙马的改编学生版,快来看看(白龙马的改编学生版)
- 萌娃唱《白龙马》走红,那生动的小表情,网友直呼 简直是戏精(萌娃唱白龙马走红)
- 朱鹤松被不断认可,凤凰传奇玲花喊话岳云鹏,索要老朱演出门票(朱鹤松被不断认可)
- 元宵晚会槽点多,芒果台上来就假唱,岳云鹏不说相声改评书了(元宵晚会槽点多)
热门推荐
- 阿里云服务器ecs入口(阿里云服务器ECS共享型和计算型有什么区别?)
- sqlserver字符串格式化(SQL server中字符串逗号分隔函数分享)
- dedecms滚动代码(dedecms常用sql语句汇总)
- 目前主流的web服务器有哪些(什么是WEB服务器? 常用的WEB服务器有哪些?)
- vue离线地图有哪些(vue 集成腾讯地图实现api附DEMO)
- mysql将字符串转换成整数(MYSQL字符串强转的方法示例)
- laravel框架运行找不到视图(解决laravel资源加载路径设置的问题)
- elementui的el-popover修改样式不生效的解决(elementui的el-popover修改样式不生效的解决)
- 跨服务器mysql数据迁移方案(从云数据迁移服务看MySQL大表抽取模式的原理解析)
- css里margin是什么意思(正确理解CSS中的margin合并的用法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9