如何巧妙解决 Too many connections 报错?

解决mysql连接数据太多,“Too many connections“ 解决办法 解决mysql连接数据太多,"Too many connections" 解决办法mysql出现Too many connections提示一般原因就是你网站连接数超过了你msyql配置的连接数据了,解决办法就是修改一下mysql配置文件中的max_connections参数或修改你程序连接直接及时处理.。先搞清楚MySQL的几个配置参数:max_connections:代表允许连接数据库的所有用户的连接数总和,是对整个服务器的用户限制,整个服务器只能开这么多session,而不考虑用户! 阅读详情
AI摘要

本文聚焦 MySQL 运维中最大连接数设置不合理,导致业务高峰期连接数打满的问题。介绍了使用 gdb 工具在不重启的状态下修改 MySQL 参数的方法,通过实验场景展示解决步骤,最后强调要遵守开发规范,合理设置最大连接数。

1. 背景

在日常的 MySQL 运维中,难免会出现参数设置不合理,导致 MySQL 在使用过程中出现各种各样的问题。

今天,我们就来讲解一下 MySQL 运维中一种常见的问题:最大连接数设置不合理,一旦到了业务高峰期就会出现连接数打满的问题。

报错信息

ERROR 1040 (HY000): Too many connections

报错原因

这个问题,无非就是并发过高,导致最大连接数被用完引起的。

解决办法

重新设置最大连接数 max_connections 的值。

处理痛点

  1. 出现了 Too many connections 的报错信息,无法用 mysql 客户端连接进行动态修改。
  2. 修改配置参数后重启,确实可以让 max_connections 的值重新生效,但是生产环境有业务访问,肯定是不能随便重启的。

2. GDB 工具

基于以上种种问题和主要痛点,那么我们就来试试 gdb 工具吧,让我们在不重启的状态下,照样可以修改 MySQL 的参数 !!!

gdb 工具的介绍在这里就不做过多赘述了,其实大多数场景下,都是把它当做调试工具来用。今天我们更多的是用到 gdb 在线修改配置参数的功能。

3. 处理过程

下面,我们就通过一个实验场景,来模拟 mysql 连接数打满,出现 Too many connections 的问题,通过 gdb 工具的解决步骤。

  1. 准备一个数据库实例,数据库版本为 MySQL 5.7.40。
  2. 创建一个空库 jiangshifeng。
mysql> create database jiangshifeng;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jiangshifeng       |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use jiangshifeng;
Database changed
mysql> show tables;
Empty set (0.00 sec)
  1. 设置该实例的最大连接数为 10。
mysql> set global max_connections=10;
Query OK, 0 rows affected (0.01 sec)

mysql> show variables like '%max_conn%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 100   |
| max_connections    | 10    |
+--------------------+-------+
2 rows in set (0.00 sec)
  1. 安装 gdb 工具。
yum install -y gdb

安装完成验证

[root@node1 ~]# gdb
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) 
(gdb) q
[root@node1 ~]# 
  1. 使用 sysbench 进行压测,模拟在 jiangshifeng 这个空库创建 11 张表,每个表的数据量为 20000000 条,连接线程数为 15。
sysbench /usr/share/sysbench/oltp_common.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=jiangshifeng --db-driver=mysql --tables=11 --table-size=20000000 --report-interval=15 --threads=15  prepare
  1. 此时,我们再次用客户端工具连接 mysql,就会报错(Too many connections)。
[root@node1 ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1040 (HY000): Too many connections
[root@node1 ~]#
  1. 通过 gdb 工具设置 max_connections 参数。

方法一

gdb -p $(pidof mysqld) -ex "set max_connections=50" -batch

方法二

[root@node1 ~]# ps -ef | grep mysql
root       1320      1  0 Mar17 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/DB/mysql --pid-file=/DB/mysql/node1.pid
mysql      1582   1320  9 Mar17 ?        03:33:44 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/DB/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=node1.err --pid-file=/DB/mysql/node1.pid --socket=/tmp/mysql.sock --port=3306

[root@node1 ~]# gdb -p 1582
...
(gdb) p max_connections
$1 = 10
(gdb) 
(gdb) set max_connections=50
(gdb) p max_connections
$4 = 50
(gdb) 
$5 = 50
(gdb) q
A debugging session is active.

	Inferior 1 [process 1582] will be detached.

Quit anyway? (y or n) y
Detaching from program: /usr/local/mysql/bin/mysqld, process 1582
[Inferior 1 (process 1582) detached]
[root@node1 sysbench]#
  1. 再次登录验证。
[root@node1 ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 146
Server version: 5.7.40-log MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> show variables like '%max_conn%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 100   |
| max_connections    | 50    |
+--------------------+-------+
2 rows in set (0.10 sec)

此时,MySQL 最大连接数 max_connections 已经成功修改。并且,前面的 sysbench 压测数据还正常运行,可以理解为基本上不影响业务。

4. 总结

  1. 本次虽然只介绍了通过不重启的方式,用 gdb 修改 max_connections 参数。但是其他参数的修改也类似,可以使用同样的方式。
  2. 尽管在实验中看到了修改参数成功了,但是操作始终有未知风险的,不能总是觉得有了这些工具,一定能够万无一失。
  3. 一定要严格遵守开发规范,数据库的问题,往往是人在使用时的不当操作导致的。例如这个最大连接数,我们要评估好业务最大的并发的峰值,设置成比业务峰值大很多,就能尽量避免出现连接数打满的问题了。
  4. 另外,该参数也不是设置得越大越好,需要评估物理资源并配合压测情况得出一个合适的值,否则程序异常死锁导致不断申请新连接产生的连接数异常打满时,可能直接把数据库搞挂了。
[MySQL排查] “Too many connections“ 错误?数据库最大连接数满了怎么办及优化 遇到 MySQL/MariaDB "Too many connections" (错误1040)?本指南详解原因(应用未关连接、慢查询、并发过高、配置不当),提供查看当前连接、调整max_connections、优化查询与连接池等解决方案。 阅读详情

相关推荐

MySQL 连接数过多的处理方法合集 - ERROR 1040 Too many connections - 卡拉云

碰到`ERROR 1040 Can not connect to MySQL server. Too many connections”-mysql`错误着实令人抓狂。 如何查看 MySQL 连接状态? 如何查看当前 MySQL 连接池是否已满? 限制超时时间的方法,缩短 sleep 时间,使系统更快回收连接。 修改配置文件中最大连接数的方法,保证连接畅通。 火线救援法,不用重启,不用登录 MySQL,即可修改最大连接数。 提前布局,给 root 预留好连接通道。

蒋川@卡拉云 5558

Mysql报错:too many connections原因及解决方法

wait_timeout 过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小,否则你可能会遭遇到“MySQL has gone away”之类的问题。wait_timeout — 指的是mysql在关闭一个非交互的连接之前所要等待的秒数。如果你没有修改过MySQL的配置,wait_timeout的初始值是28800。5、以上步骤修改后虽然能登录,但仍有隐患,我们应该把那些sleep的连接杀掉。2、查看mysql允许的最大连接数。

B001XFX的博客 3万+

C++11轻量级Web服务器实现:从Reactor模式到线程池的实战解析

Web服务器是现代网络应用的核心基础设施,其核心原理在于高效处理并发连接与HTTP协议通信。通过I/O多路复用技术(如epoll)实现事件驱动,服务器能够以单线程监控大量连接,这是高并发架构的基石。结合线程池技术,将耗时的业务逻辑处理与高效的事件分发解耦,有效解决了阻塞与资源竞争问题,从而在工程实践中实现高性能与可扩展性。这种Reactor模式与线程池的组合,广泛应用于后端服务、API网关等需要处理海量并发的场景。本文以C++11实现的轻量级Web服务器为例,深入剖析其核心架构,涵盖事件分发、连接管理、HT

weixin_33674976的博客 375

解决Too many connections

too many connections

dqchouyang的专栏 2486

HT7036计量芯片SPI通信与数据读取实战解析

本文详细解析HT7036计量芯片的SPI通信与数据读取实战,涵盖SPI时序配置、命令发送、数据读取及常见问题排查。重点介绍如何通过SPI接口与MCU通信,实现电能数据的稳定采集与处理,为智能电表等应用提供实用解决方案。

vscode5coder的博客 264

VirtualBox虚拟机上ubuntu系统安装问题记:显示画面太小、启动就异常退出等

报错:Failed to load R0 module D:/VMMR0.r0: The path is not clean of leading double slashes: ‘D:/VMMR0.r0’ (VERR_SUPLIB_PATH_NOT_CLEAN).解决方法特别简单,就是安装VIrtualBox的时候不要安装在CDE等盘根目录下。首先VirtualBox的下载安装过程是比较简单的,此处就不赘述了。然后E盘下新建个目录,安装到这个目录下就可解决。

qq_42595610的博客 2825

MySQL核心函数实战手册:从字符串处理到窗口函数优化

在数据库开发中,SQL函数是数据处理与转换的核心工具,它们如同编程语言中的内置方法,能直接在数据库层高效完成字符串拼接、数值计算、日期转换等操作。理解其原理能显著减少应用层代码量,提升查询性能与可维护性。字符串处理函数如CONCAT_WS和REPLACE,能安全处理NULL值并实现复杂文本替换;日期函数如DATE_FORMAT和DATEDIFF,则精准解决时区与格式难题。这些函数的技术价值在于通过声明式语法封装复杂逻辑,直接作用于数据集,避免不必要的数据传输与客户端计算。在应用场景上,从基础的数据清洗、报表

weixin_34162228的博客 308

使用TinyProxy搭建代理服务器

背景 办公电脑所在网络无法连接外网,机房服务器可以连接外网,通过服务器代理上网; 一、CentOS下TinyProxy安装–搭建代理服务器 TinyProxy是个轻量级简单的HTTP/HTTPS代理程序,GitHub和官网,安装方式这里主要介绍两种 CentOS下yum安装,参考:TinyProxy安装 Docker安装 先安装docker环境yum install docker -y 二、Win10下使用 ...

椰汁菠萝 1万+

ZooKeeper原理与实战:分布式一致性协调基石

ZooKeeper是分布式系统中实现强一致性的核心协调服务,其本质是通过ZAB协议在不可靠网络中构建确定性状态同步机制。不同于通用分布式数据库,它专注元数据协调,以顺序一致性、临时节点、Watcher监听和会话租约等轻量模型支撑服务发现、分布式锁与选主等关键场景。ZAB协议作为Paxos的垂直优化,兼顾性能与严格线性一致性,使其成为HBase、Kafka、Flink等大数据组件的底层依赖。理解ZooKeeper,就是理解CAP权衡、共识算法落地与分布式原语构建逻辑——它是工程师深入分布式内核不可绕行的实践入

weixin_33874713的博客 431

阿里开源最强数字人工具 EchoMimicV2,本地部署(一)

EchoMimicV2是阿里推出的半身人体AI数字人项目,基于参考图片、音频剪辑和手部姿势序列生成高质量动画视频,确保音频内容与半身动作的一致性。现在本地部署,安装体验一下。

缘分天空的专栏 4614

VisualStudio2022配置CGAL

vs2022和vs2017安装配置boost没什么区别,只需要注意boost的msvc得是14.3的,这玩意跟visualstudio版本挂钩的。压缩包解压,得到下面这两文件,然后把auxiliary这个文件挪到CGAL-5.6里面就行了。我用cgal读取一个stl模型,并输出相关信息(想可视化的话需要安装Qt,不想装Qt也可以装VTK)然后下载下面这两个压缩包。照着下面的截图填就完事了。

weixin_43850909的博客 1171

知识体系之MySQL

mysql

JaweG 5251

Python爬虫教程:爬取法院司法拍卖数据全流程实战(附反爬+数据分析方案)

Python爬虫爬取法院司法拍卖数据的核心是模拟真人行为规避反爬+精准解析页面数据+合理处理数据。新手不用一开始就追求高级的反爬技巧和复杂的数据分析,先把基础的分页爬取和数据保存功能跑通,再逐步优化。我做的这个工具现在每周帮朋友爬取全国10个城市的法拍房数据,自动生成分析报告,他说这让他的投资决策效率提升了一倍。如果你们在开发过程中遇到问题,比如反爬失败、数据解析错误,都可以在评论区留言,我会尽力解答。后续我还会出一期爬取京东司法拍卖数据的教程,帮助大家获取更多的法拍数据来源。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2177

Java Web毕业设计实战:校园电商系统开发全流程解析

Java Web开发是构建动态网站和Web应用的核心技术栈,其核心原理基于Servlet和JSP规范,通过处理HTTP请求与响应实现服务器端逻辑。这项技术的核心价值在于能够高效、安全地构建企业级应用,尤其在电子商务、内容管理系统等领域应用广泛。在实践层面,掌握数据库设计、MVC架构和会话管理是开发功能完整系统的关键。以校园水果鲜花商城为例,一个典型的应用场景,它涵盖了用户认证、商品管理、购物车和订单处理等核心电商模块。实现这样的系统,需要综合运用JSP进行视图渲染,Servlet作为控制器处理业务,并结合J

weixin_30847865的博客 315

【Unity 实用工具篇】✨| 受击插件Feel 详细教程,开发游戏时更好的操控 游戏打击感

在一个游戏中,游戏手感对于游戏的整体游玩体验是非常重要的,而游戏手感中有一个很重要的点:打击感 那本篇文章就来讲一下打击感中的受击反馈部分。 在游戏中经常会用到攻击敌人,敌人扣血,执行某些受击功能的执行,尤其是对于有战斗场景的游戏来说,这就是标准的受击反馈。 所以引出本篇文章的主角:受击插件 Feel 的使用,2D和3D游戏都可以使用。

努力前行,总会成为自己心中的那道光 3万+

Apple Store 上架过包:iOS审核4.3被拒原因分析与解决修改方案

Apple Store 上架过包:iOS审核4.3被拒原因分析与解决修改方案

专业解决各种上架过包问题,专业团队专业处理 751

Java基础面试题总结《七》

本文深入解析了MySQL索引与MVCC的核心原理。主要内容包括: 聚集索引与非聚集索引的区别:聚集索引决定数据物理存储顺序(叶子节点存完整数据),而非聚集索引叶子节点只存主键值,查询时需回表。 索引失效的6种场景:包括对索引列运算/使用函数、违反最左前缀原则、隐式类型转换、使用!=/NOT IN、%开头的LIKE查询、OR连接非索引列等。 不建议建索引的4种情况:数据量小、字段区分度低、写多读少的表、查询使用函数/模糊匹配等。 MVCC机制:通过多版本控制和Read View实现无锁读取,解决读写冲突,但写

qq_55862497的博客 218

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Mysql 报错`Too many connections`原因及解决办法

方案1:临时调整最大连接数,set GLOBAL max_connections = 300。 方案2:临时变更连接超时时间,SET GLOBAL interactive_timeout = 60;,SET GLOBAL wait_timeout = 60;

xu_xin96的博客 3700

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

链接Mysql数据库提示too many connections

MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此客户端在连接到MySQL Server处理完相应的操作后,应该断开连接并释放占用的内存。如果MySQL Server有大量的闲置连接,不仅会白白消耗内存,而且如果连接一直在累加而不断开,最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。

lujiawei00的专栏 3842

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

错误!!!Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行)

Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行一、问题还原二、解决思路三、解决办法 一、问题还原 mysql> show variables like '%max_connection%'; | Variable_name | Value | max_connections | 151 | mysql> set global max_connections=1;Query OK, 0 rows affected (0.00 sec)

DLZ的博客 1万+

Too many connections错误的原因及解决办法

一 产生too many connections 的直接原因 因为数据库提供的连接被全部占满了 连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout 都有关系。 ...

chuoweibei5678的博客 9021

如果MySQL出现 “Too many connections“ 错误,该如何解决?

当你想要连接MySQL时出现"Too many connections" 报错的情况下,该如何解决才能如愿以偿呢?

T_LOYO的博客 2921

MySQL:Too many connections如何解决

错误现场 数据库无法连接,报错:“ERROR 1040(HY000): Too many connections” 故障定位 数据库自己其实是有一个连接池的,你的每个系统部署在一台机器上的时候,那台机器上部署额系统实例自己也是有一个连接池的,系统每个连接socket都对应着数据库连接池中的一个连接socket,这就是TCP网络连接。 所以当数据库报错Too many connections的时候,就是说连接池已经满了,业务系统不能跟它建立更多的连接了! 一个生产案例中,数据库部署在64GB的大内存物理机上

OceanStar的博客 1万+

Too many connections 错误解决

PolarDB部署中遇到Toomanyconnections报错的解决方案:当连接数达到默认151上限时会出现此问题,可通过SHOW PROCESSLIST命令排查连接来源。解决方案包括:1)临时调整连接数SET GLOBAL max_connections=500;2)永久修改my.cnf配置并重启服务;3)设置wait_timeout=300秒自动清理空闲连接。还提供了完整的PolarDB重启脚本,推荐将max_connections设为500,

分享是一种积极的生活态度~~ 2075

MySQL ERROR 1040 “too many connections“解决方法,MySQL修改最大连接数,MySQL配置连接超时

MySQL ERROR 1040 “too many connections 解决方法,MySQL修改最大连接数,MySQL修改连接超时

欢迎关注,共同学习进步! 5216

学习笔记-too many connections报错

使用这两个方法可以暂时解决“too many connections” 的问题,但感觉治标不治本,导致这个问题的根本原因是获取连接时,无法使用已休眠的连接,而是每次都获取新的连接导致的,通过以上方法虽能解决问题,但无法发挥出使用数据库连接池的优势。而使用Connection的close()方法只是关闭了实现类和连接池中的连接,当并未真正的关闭连接池和数据库之间的连接,当我们需要获取新的连接时可以直接从数据库连接池中获取连接,不用获取重新向数据库获取连接。通过造成问题的原因,有两种解决方法。

qq_54759193的博客 1759
上一篇: SQLShift 全新上线:Oracle→OceanBase 迁移利器
下一篇: SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值