MySQL 连接数过多的处理方法合集 - ERROR 1040 Too many connections - 卡拉云
来源:SegmentFault
时间:2023-02-17 11:03:52 245浏览 收藏
本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《MySQL 连接数过多的处理方法合集 - ERROR 1040 Too many connections - 卡拉云》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

本文首发:MySQL 连接数过多的处理方法合集 - Too many connections - 卡拉云
碰到
Can not connect to MySQL server. Too many connections”-mysql错误着实令人抓狂。这基本等于失去了对 MySQL 的控制权。本教程将详细讲解多种处理此错误的方法。
sudo mysql -uroot -p ERROR 1040 (00000): Too many connections
本教程将分这几个来讲解此类错误的原因。
- 如何查看 MySQL 连接状态?
- 如何查看当前 MySQL 连接池是否已满?
- 限制超时时间的方法,缩短 sleep 时间,使系统更快回收连接。
- 修改配置文件中最大连接数的方法,保证连接畅通。
- 火线救援法,不用重启,不用登录 MySQL,即可修改最大连接数。
- 提前布局,给 root 预留好连接通道。
一. 错误原因
出现 MySQL 连接数过多有多种情况,多数是因为
mysql_connect,没有
mysql_close; 当
sleep连接占满最大连接数
max_connections时,会导致
Too many connections错误。
MySQL 默认最大连接数
max_connections为 151,其实 MySQL 还给 root 留了多一个通道,真正的最大连接数为
max_connections + 1。但实际工作中因为各种原因,这个 1 也有可能被占用。这时,我们无法通过登录 MySQL 调整参数的方法来处理这个错误。
二. 查看当前 MySQL 连接情况
我们可以使用
SHOW PROCESSLIST;查看前 100 条连接。
SHOW PROCESSLIST;
也可以使用
SHOW full PROCESSLIST;查看所有连接。
SHOW full PROCESSLIST;

上图中 ID 15 的连接 我们可以看到它已经 11388s
扩展阅读:《如何使用 MySQL 慢查询日志进行性能优化》
三. 如何查看当前 MySQL 连接池是否已满?
使用
mysqladmin -u kalacloud -p status查看当前连接数情况

将
kalacloud替换为你的 MySQL 账号名称,在返回的结果中,
Threads的值为当前连接数,如果当前连接数接近或等于最大连接数,那么就说明 MySQL 连接数已经满了或接近满了。
扩展阅读:《MySQL 触发器的创建、使用、查看、删除教程及应用场景实战案例》
四. 合理设置超时时间
之所以会出现大量
sleep占满连接,除了业务量的原因外,也有可以从超时时间着手调整,可根据实际情况适当缩短超时时间,让 MySQL 可在短时间自动清理超时连接,以达到保证连接通常的目的。
mysqld连接超时参数有以下两个:
默认情况下,两者都是 28800 秒(8 小时),我们可以在 MySQL 配置文件中修改这两个参数。
如果你使用的是
mysql_pconnect这种持久连接的话,可以将超时时间降到更合适的值,比如 600 (10 分钟)甚至 60(1 分钟)。这个超时时间并没有一个明确的时间,主要还是要看你的应用场景中的实际需求。
1.在配置文件中修改超时时间(需重启 MySQL 生效):
首先打开
mysqld.cnf配置文件。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
然后在配置文件中找到这两行,并修改对应的参数:
[mysqld] interactive_timeout=60 wait_timeout=60
扩展阅读:《MySQL 配置文件详解》
2.临时变更连接超时时间(无需重启):
SET GLOBAL interactive_timeout = 60; SET GLOBAL wait_timeout = 60;
注意:
- 这是临时变更配置的方法,在重启 MySQL 后会恢复配置文件中的设置值。
- 对于已经打开的连接,是不会被关闭的。只有新建立的连接才会在 60 秒后关闭。
扩展阅读:《如何远程连接 MySQL 数据库,阿里云腾讯云允许远程连接教程》
五. 查看及修改最大连接数
在 MySQL 中,默认连接数为 151,我们可以通过修改 MySQL 配置文件永久调整连接数参数,也可以通过 SQL 命令临时调整。
1.查看当前 MySQL 连接数
mysql> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 151 | +-----------------+-------+ 1 row in set (0.01 sec) mysql>
2.临时调整当前 MySQL 连接数
set GLOBAL max_connections = 300;

3.通过修改 MySQL 配置文件调整最大连接数
首先打开 MySQL 配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 下面找到
max_connections,如果没有可直接添加。
[mysqld] ... max_connections = 300 ...
修改后重启 MySQL,使配置文件生效:
sudo systemctl restart mysql
重启后,进入 MySQL ,我们可以看到最大连接数配置已经生效。
mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 300 | | mysqlx_max_connections | 100 | +------------------------+-------+ 2 rows in set (0.02 sec) mysql>
扩展阅读:《MySQL 配置文件 my.cnf / my.ini 逐行详解》
六. 无法登录 MySQL 时,如何修改最大连接数
在无法登录又无法重启 MySQL 时,我们可以使用以下方法进行操作,以增大连接数。
1.修改 pid 增大连接数
我们可以使用 gdb 工具,在不进入数据库的情况下,修改最大连接数。
gdb -p $(cat data/kalacloud.pid) -ex "set max_connections=5000" -batch
data/kalacloud.pid
:将这里修改为你服务器中pid
的文件路径及文件名。
此方法仅适用于特殊、紧急情况,在生产环境使用,有一定风险,慎用。
七. 提前布局,防患于未然
在 MySQL 配置文件中,有两个有关连接数的参数
max_connections
:控制最大连接数。max_user_connections
:控制单个用户的最大连接数。当此参数为 100 时,那么任意用户(含 root 用户)最多可创建 100 个连接。
制定连接策略:
max_connections = 2000 max_user_connections= 300
当 MySQL 有 6 个用户时(不含 root ),单个用户最大连接数为 300,那么 6 个用户最多有 1800 连接。那么系统总会剩下 200 个连接留给 root 使用。
六. 总结
有关 MySQL 连接数过多的错误,我们要在平时的工作中多实践,这里的很多关键参数都需要我们对手中的工作有更宏观的认识,才能更好的设定这些参数。

最后推荐以下卡拉云,卡拉云是一套低代码开发工具,可一键接入包括 MySQL 在内的常见数据库及 API,无需懂任何前端,只需要简单拖拽,即可快速搭建企业内部工具。数月的开发工作量,使用卡拉云后可缩减至数天,免费试用卡拉云。

卡拉云可一键接入市面上常见的数据库及 API
有关 MySQL 教程,可继续拓展学习:
- MySQL 时间戳用什么类型 - MySQL 时间函数详解
- MySQL 中如何实现 BLOB 数据类型的存取,BLOB 有哪些应用场景?
- 如何在 MySQL / MariaDB 中跳过多张表导出或指定多张表导出备份
- 如何将 MySQL / MariaDB 的查询结果保存到文件
- MySQL 触发器使用教程 - 创建、删除、查看
今天关于《MySQL 连接数过多的处理方法合集 - ERROR 1040 Too many connections - 卡拉云》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于mysql的内容请关注golang学习网公众号!
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
-
404 收藏
-
101 收藏
-
265 收藏
-
209 收藏
-
446 收藏
-
339 收藏
-
285 收藏
-
259 收藏
-
374 收藏
-
475 收藏
-
483 收藏
-
462 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习