mysql报Toomanyconnection的问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: mysql报Toomanyconnection的问题

产生问题的原因是MySQL的Sleep进程占用了大量的连接。

解决如下:

1、查看数据库最大连接数和当前连接数,发现很多sleep进程
 
最大连接数:show variables like '%max_connections%';
 
当前连接数:show full processlist;
 
2、经排查,产生这么多sleep进程的原因是数据库连接没有自动回收
 
需要在数据库连接池中添加 
 
removeAbandoned="true"
 
removeAbandonedTimeout="60"
 
logAbandoned="true"
MySQL的最大连接数,增加该值增加mysqld 要求的文件描述符的数量。如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。
 
数值过小会经常出现ERROR 1040: Too many connections错误,可以过’conn%’通配符查看当前状态的连接数量,以定夺该值的大小。
 
show variables like ‘max_connections’ 最大连接数
 
show  status like ‘max_used_connections’响应的连接数
 
mysql> show variables like 'max_connections';
 
+-----------------+-------+
 
| Variable_name   | Value |
 
+-----------------+-------+
 
| max_connections | 151   |
 
+-----------------+-------+
 
1 row in set (0.00 sec)
 
 
mysql> show status like 'max%connections';
 
+----------------------+-------+
 
| Variable_name        | Value |
 
+----------------------+-------+
 
| Max_used_connections | 152   |
 
+----------------------+-------+
 
1 row in set (0.00 sec)
 
max_used_connections / max_connections * 100% (理想值≈ 85%) 
 
如果max_used_connections跟max_connections相同 那么就是max_connections设置过低或者超过服务器负载上限了,低于10%则设置过大。
 
MySQL的max_connections参数用来设置最大连接(用户)数。每个连接MySQL的用户均算作一个连接,max_connections的默认值为100。本文将讲解此参数的详细作用与性能影响。
 
与max_connections有关的特性
 
MySQL无论如何都会保留一个用于管理员(SUPER)登陆的连接,用于管理员连接数据库进行维护操作,即使当前连接数已经达到了max_connections。因此MySQL的实际最大可连接数为max_connections+1;
 这个参数实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;
 增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;
 该参数设置过小的最明显特征是出现”Too many connections”错误;
 
调整max_connections参数的值
 
1.在配置文件my.cnf中设置max_connections的值
 
找到max_connections一行,修改为(如果没有,则自己添加),
上面的1000即该参数的值。
 
2、实时(临时)修改此参数的值
 
首先登陆mysql,执行如下命令:
 
 
 
 [root@www ~]# mysql -uroot -p
 
 
然后输入MySQL Root的密码。
查看当前的Max_connections参数值:
 
 
 
mysql> SELECT @@MAX_CONNECTIONS AS 'Max Connections';
 
 
设置该参数的值: 
 
 
 
mysql> set GLOBAL max_connections=1000;
 
 
(注意上面命令的大小写)
修改完成后实时生效,无需重启MySQL。
 
总体来说,该参数在服务器资源够用的情况下应该尽量设置大,以满足多个客户端同时连接的需求。否则将会出现类似”Too many connections”的错误。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 存储 关系型数据库
MySQL
MySQL
86 5
|
存储 关系型数据库 MySQL
mysql为什么不推荐用空
mysql为什么不推荐用空
128 0
|
SQL 算法 关系型数据库
【MySQL】 MRR
【MySQL】 MRR
134 0
|
SQL 安全 关系型数据库
|
SQL 存储 缓存
MySQL-分享篇
MySQL学习分享篇
160 0
|
SQL 搜索推荐 关系型数据库
MySQL的初步使用
引入 在之前的一篇文章中,我们一起过了一遍标准SQL语言的核心操作。标准sql语言适配市面上所有主流的RDBMS(即关系数据库管理系统 Relational DataBase Management System),你与任何一个RDBMS连接后,基本可以直接用所学命令进行操作了。
MySQL的初步使用
|
SQL 存储 缓存
MySQL的组成
SQL运行机制概述
144 0
MySQL的组成
|
关系型数据库 MySQL
MySQL练习13——where in和not in
MySQL练习13——where in和not in!
|
关系型数据库 MySQL
带你学MySQL系列 | MySQL数据类型详解(二)
带你学MySQL系列 | MySQL数据类型详解(二)
带你学MySQL系列 | MySQL数据类型详解(二)
下一篇
DataWorks