高级DBA带你处理MySQL客户端程序频繁访问MYSQL数据库并错误链接不释放导致连接数爆满事故实战

本文主要是介绍高级DBA带你处理MySQL客户端程序频繁访问MYSQL数据库并错误链接不释放导致连接数爆满事故实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高级DBA带你处理MySQL客户端程序频繁访问MYSQL数据库并错误链接不释放导致连接数爆满事故实战

一、生产事故描述

Mysql生产数据库最大连接数爆满,其余客户端也同样拿不到数据库连接,生产异常,数据传输失败!
报错如下:

在这里插入图片描述

已经排查出某一个数据库用户错误连接非常多,并且不释放!

用这个用户登录程序错误!
在这里插入图片描述

在这里插入图片描述
用户过多错误连接已经被锁定!!

二、问题解决方法

步骤一 排查出引起连接错误过多的账号,关掉起客户端的程序

关掉程序,避免再频繁攻击主数据库!

步骤二 删掉那些错误的连接,避免占着数据库资源!让其他用户拿不到连接!!

select concat('kill ',ID,';')  
from information_schema.PROCESSLIST 
where Command='Connect' and 
STATE='Waiting in connection_control plugin';  #批量删掉错误连接
select ID from information_schema.PROCESSLIST 
where Command='Connect' and 
STATE='Waiting in connection_control plugin';  # ID 为查询的线程ID

我们可以用工具批量删除这些错误的连接,释放数据库,也可以执行上面的语句批量删!
在这里插入图片描述

步骤三 这个要MYSQL客户端去解决频繁访问数据库的调度

这个是要客户端程序去解决的,就是这个数据库调度跟释放的逻辑!

步骤四 重新验证问题是否解决

ALTER USER 'username'@'localhost' ACCOUNT UNLOCK;  #用户解锁
SHOW  VARIABLES LIKE 'max_connect_errors'; #查询系统当前的配置值

加大运行错误连接的个数!

set global max_connect_errors = 500;
重新打开之前的客户端程序再通过数据库监控,查看之前的问题是否已经解决!

三、总结

MySQL Waiting in connection_control plugin 的含义解释

MySQL中出现"Waiting in connection_control plugin"表示客户端连接请求被Connection-Control Plugins插件拦截,连接处于等待用户身份验证的状态。出现该问题的原因可能是用户名或密码错误,导致默认MySQL连接数被耗尽。可以尝试修改Connection-Control Plugins插件的配置参数来解决该问题,例如将connection_control.failed_login_threshold参数设置为一个非常大的值,从而达到类似禁用插件的效果。

事故应该是,MYSQL客户端程序配置错了用户名密码,然后程序无限制的频繁反复重连数据库!
然后找发现还会生成状态为“Waiting in connection_control plugin”的等待连接,
经查询对应的Host,原来是自己的一个很旧的服务在一直跑着,但后来mysql密码更改了,造成这个程序一下在重新尝试连接Mysql,,,杀掉它,问题解决。。。

其他可能原因,比如密码失效,密码过期了,但是程序一直起着!或者超出数据库打开文件数的值!
原因1.
数据库打开文件数超过linux默认打开文件
数量1024 ulimit -a
查看openfiles数量
原因2.
用户名或密码错误,不停连接,默认mysql连接数被耗尽.
根因:链接异常(用户名密码错误)导致connectioncontrol 插件进行拦截,拦截用户身份验证处于 “waiting in connection_control plugin” 的链接延迟状态。

解决方案:

修改connection_control 插件配置参数 - 可选

SET GLOBAL connection_control.failed_login_threshold = 1000000; #这个不建议

将 connection_control.failed_login_threshold 参数设置为一个非常大的值,这将使插件几乎不再对登录尝试进行限制,从而达到类似禁用的效果。请注意,这种方法并非官方推荐的禁用插件的方式,因此在生产环境中使用时需要谨慎考虑可能的影响
也有可能是Mysql密码自动过期了,此时微服务也会报错。
提示密码过期: SQLException: Your password has expired. To log in you must change it using a client that supports e
由于密码过期导致连接失败,所以也会频繁重连,此时ip可能会被Mysql block 。 此时数据库负载可能也会突然升高。
java.sql.SQLException: null, message from server: “Host ‘172.18.224.48’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’”)

解决方案

解决密码过期问题 - 重置密码即可
或者临时取消过期机制: ALTER USER ‘repl’@‘%’ PASSWORD EXPIRE NEVER;
解决黑名单问题 - mysql> FLUSH HOSTS;

笔者简介
国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!

在这里插入图片描述

在这里插入图片描述

这篇关于高级DBA带你处理MySQL客户端程序频繁访问MYSQL数据库并错误链接不释放导致连接数爆满事故实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/853104

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、