当前位置:首页 > 文章列表 > 数据库 > MySQL > MySQL 连接数过多的处理方法合集 - ERROR 1040 Too many connections - 卡拉云

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

来源:SegmentFault 2023-02-17 11:03:52 0浏览 收藏

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

MySQL 连接数过多的处理方法合集

本文首发: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;

查看 MySQL 中所有连接

上图中 ID 15 的连接 我们可以看到它已经 11388s

扩展阅读:《如何使用 MySQL 慢查询日志进行性能优化

三. 如何查看当前 MySQL 连接池是否已满?

使用 

mysqladmin -u kalacloud -p status
 查看当前连接数情况

使用 mysqladmin 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;

MySQL 配置文件调整最大连接数

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

卡拉云可一键接入市面上常见的数据库及 API

有关 MySQL 教程,可继续拓展学习:

今天关于《MySQL 连接数过多的处理方法合集 - ERROR 1040 Too many connections - 卡拉云》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于mysql的内容请关注golang学习网公众号!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
父子级关系处理父子级关系处理
上一篇
父子级关系处理
Mybatis 批量操作 引发上限问题
下一篇
Mybatis 批量操作 引发上限问题
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    20次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    29次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    35次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    43次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    36次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码