Mysql 出现故障应用直接中断连接导致数据被锁(生产故障)详解
应用直接中断连接导致数据被锁(生产故障)
- 这是一个由应用重启连接直接而导致数据被锁的问题。
- 系统大致结构
基本情况:
- 整个架构为了统一管理db连接,共享连接。
- 应用通过loadbalance连接db访问层。
- db访问层后端代理若干db。
- 应用到loadbalance以mysql协议通信。
- db访问层到db以JDBC方式通信。
故障: 某些数据库中的表数据相当长一段时间被锁,导致应用某些场景失败。
故障分析:应用开启一个事务的set autocommit=0命令是从app-lb-db访问层-db,期间如果某个事务还未执行完,而app强行中断连接,就会导致app-lb的连接断开,而lb并不直接断开后端的连接,即lb-db访问层-db的连接不会断,从而导致db不会发生回滚操作。而且此事务对某些记录加了锁,于是就会发生某些数据被锁。直到db访问层检测出该连接超过了idle时间才会关闭,并发送回滚命令给db。
解决问题:
① lb在前端连接关闭时要同时关闭同会话的后端连接,并且db访问层要监听lb的连接,一旦关闭则要做回滚操作。
②去掉lb,提供客户端loadbalance,应用一旦关闭连接db访问层也要关闭连接。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
MySQL复制的概述、安装、故障、技巧、工具(火丁分享)
同MongoDB,Redis这样的NoSQL数据库的复制相比,MySQL复制显得相当复杂! 概述 首先主服务器把数据变化记录到主日志,然后从服务器通过I/O线程读取主服务器上的主日志,并且把它写入到从服务器的中继日志中,接着SQL线程读取中继日志,并且在从服务器上重放,从而实现MySQL复制.具体如下图所示: 整个过程反映到从服务器上,对应三套日志信息,可在从服务器上用如下命令查看: 复制代码 代码如下: mysql> SHOW SLAVE STATUS; Master_Log_File &
-
一次MySQL慢查询导致的故障
我们知道分析MySQL语句查询性能的方法除了使用EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为"慢查询". 一. 起因 研发反应某台数据库僵死,后面的会话要么连接不上,要么要花费大量的时间返回结果,哪怕是一个简单的查询. 二. 处理 首先去监控平台查看服务器以及数据库状态,发现这台数据库有大量的慢查询.继续看服务器监控,CPU 平均使用率较高,IO 读写平均值正常.登录到 MySQL,使用 SHOW PROCESSL
-
MySQL下高可用故障转移方案MHA的超级部署教程
MHA介绍 MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用.在宕机的时间内(通常10-30秒内),完成故障切换,部署MHA,可避免主从一致性问题,节约购买新服务器的费用,不影响服务器性能,易安装,不改变现有部署. 还支持在线切换,从当前运行master切换到一个新的master上面,只需要很短的时间(0.5-2秒内),此时仅仅阻塞写操作,并不影响读操作,便于主机硬件维护. 在有高可用,数据一致性要求的系统上,MHA 提供了有用的功能
-
检测MySQL的表的故障的方法
表的故障检测和修正的一般过程如下: 检查出错的表.如果该表检查通过,则完成任务,否则必须修复出错的数据库表. 在开始修复之前对表文件进行拷贝,以保证数据的安全. 开始修复数据库表. 如果修复失败,从数据库的备份或更新日志中恢复数据. 在使用myisamchk或isamchk检查或修复表之前,应该首先注意: 建立数据库备份和使用更新日志,以防修复失败,丢失数据. 仔细阅读本章内容以后再进行操作,尤其是不应该在阅读"避免与MySQL服务器交互作用"之前进行操作.因为,在你没有足够的知识之前
-
MYSQL主从库不同步故障一例解决方法
于是: 1.在主库中创建一个临时库,将需要导入的表文件复制过来 2.执行 create database tmpdb; create table tmptable; cp mysql_date_file master_data_file //shell command 复制数据表文件到master data_dir下 insert into master.tmptable select * from tmpdb.tmptable; 执行完后,主库中数据导入正常 再看slave status sh
-
Mysql 出现故障应用直接中断连接导致数据被锁(生产故障)详解
应用直接中断连接导致数据被锁(生产故障) 这是一个由应用重启连接直接而导致数据被锁的问题. 系统大致结构 基本情况: 整个架构为了统一管理db连接,共享连接. 应用通过loadbalance连接db访问层. db访问层后端代理若干db. 应用到loadbalance以mysql协议通信. db访问层到db以JDBC方式通信. 故障: 某些数据库中的表数据相当长一段时间被锁,导致应用某些场景失败. 故障分析:应用开启一个事务的set autocommit=0命令是从app-lb-db访问层-db,
-
mysql数据存储过程参数实例详解
MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible). drop procedure if exists pr_param_in; create procedure pr_param_in ( in id
-
Mysql Binlog数据查看的方法详解
binlog介绍 binlog,即二进制日志,它记录了数据库上的所有改变. 改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕. binlog格式 基于语句,无法保证所有语句都在从库执行成功,比如update ... limit 1; 基于行,将每一次改动记为binlog中的一行.在执行一个特别复杂的update或者delete操作时,基于行的格式会有优势. 登录到mysql查看binlog 只查看第一个binlog文件的内容 show bin
-
关于pytorch中全连接神经网络搭建两种模式详解
pytorch搭建神经网络是很简单明了的,这里介绍两种自己常用的搭建模式: import torch import torch.nn as nn first: class NN(nn.Module): def __init__(self): super(NN,self).__init__() self.model=nn.Sequential( nn.Linear(30,40), nn.ReLU(), nn.Linear(40,60), nn.Tanh(), nn.Linear(60,10), n
-
Python中断多重循环的几种方式详解
这篇文章主要介绍了Python中断多重循环的几种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 I. 跳出单循环 不管是什么编程语言,都有可能会有跳出循环的需求,比如枚举时,找到一个满足条件的数就终止.跳出单循环是很简单的,比如 for i in range(10): if i > 5: print i break 然而,我们有时候会需要跳出多重循环,而break只能够跳出一层循环,比如 for i in range(10): for
-
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
在MySQL中可以使用IF().IFNULL().NULLIF().ISNULL()函数进行流程的控制. 1.IF()函数的使用 IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值. SELECT IF(TRUE,'A','B'); -- 输出结果:A SELECT IF(FALSE,'A','B'); -- 输出结果:B 2.IFNULL()函数的使用 IFNULL(expr1,expr2),如果
-
Java @Async注解导致spring启动失败解决方案详解
前言 在这篇文章里,最后总结处,我说了会讲讲循环依赖中,其中一个类添加@Async有可能会导致注入失败而抛异常的情况,今天就分析一下. 一.异常表现,抛出内容 1.1循环依赖的两个class 1.CycleService1 @Service public class CycleService1 { @Autowired private CycleService2 cycleService2; @WangAnno @Async public void doThings() { System.out
-
Java并发编程加锁导致的活跃性问题详解方案
目录 死锁(Deadlock) 死锁的解决和预防 1.超时释放锁 2.按顺序加锁 3.死锁检测 活锁(Livelock) 避免活锁 饥饿 解决饥饿 性能问题 上下文切换 什么是上下文切换? 减少上下文切换的方法 资源限制 什么是资源限制 资源限制引发的问题 如何解决资源限制的问题 我们主要处理锁带来的问题. 首先就是最出名的死锁 死锁(Deadlock) 什么是死锁 死锁是当线程进入无限期等待状态时发生的情况,因为所请求的锁被另一个线程持有,而另一个线程又等待第一个线程持有的另一个锁 导致互相等
-
React实现控制减少useContext导致非必要的渲染详解
目录 前言 1.拆分context 2.使用useMemo包裹函数 前言 在我们使用useContext来进行数据流管理时,每当context更新时,所有使用到该context的组件都会重新渲染.如果我们的context的数据是由多个部分组成的,但只有其中一两个字段会频繁更新,但其他的数据都比较稳定时,这时,即使组件值使用到了比较稳定的那部分数据,但它依然会频繁渲染,这就很容易会导致性能问题.我们一般会使用拆分context或者结合useMemo来减少组件渲染的次数: 1.拆分context 我
-
MySQL数据操作管理示例详解
目录 一.查看表和查看表的定义 二.删除表 三.创建表 四.表类型 五.修改表 六.完整性 1.数据完整性 2.使用约束实现数据完整性 3.在数据表上添加约束 4.删除约束 七.添加数据 八.修改数据 九.删除数据 十.SQL语句中的运算符 算数运算符 比较运算符 逻辑运算符 一.查看表和查看表的定义 SHOW TABLE 表名 DESC 表名; DESCRIBE 表名 二.删除表 DROP TABLE [IF EXISTS ] 表名; 如果表USER存在,删除表USER DROP TABLE
随机推荐
- iOS点击文字按钮变转圈加载效果
- JSP程序使用JDBC连接MySQL的教程
- SQLServer 2008中SQL增强之一:Values新用途
- AngularJs 延时器、计时器实例代码
- 使用 Iisext.vbs 删除应用程序依存关系的实现方法
- iisweb.vbs iis网站管理脚本使用介绍
- js与C#进行时间戳转换
- 用javascript实现计算两个日期的间隔天数
- KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
- UCenter Home二次开发指南
- python时间整形转标准格式的示例分享
- Go语言服务器开发之简易TCP客户端与服务端实现方法
- 详解C语言函数返回值解析
- 一些常用的php简单命令代码集锦
- python time模块用法实例详解
- 数据库更新Sqlserver脚本总结
- JQuery 1.6发布 性能提升,同时包含大量破坏性变更
- ES6中箭头函数的定义与调用方式详解
- Bootstrap Img 图片样式(推荐)
- 几个有用的unix命令快捷键整理