mysql报Toomanyconnection的问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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”的错误。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 Prometheus Cloud Native
Grafana 系列文章(十):为什么应该使用 Loki
Grafana 系列文章(十):为什么应该使用 Loki
|
SQL 关系型数据库 MySQL
mysql too many connections 解决
mysql too many connections 解决
463 4
|
7月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
3月前
|
SQL 人工智能 Rust
Java 开发中Stream的toMap与Map 使用技巧
本文深入解析了 Java 中 `toMap()` 方法的三大问题:重复键抛出异常、`null` 值带来的风险以及并行流中的性能陷阱,并提供了多种替代方案,如使用 `groupingBy`、`toConcurrentMap` 及自定义收集器,帮助开发者更安全高效地进行数据处理。
199 0
|
SQL 开发框架 Java
【.NET Core】多线程之线程池(ThreadPool)详解(一)
【.NET Core】多线程之线程池(ThreadPool)详解(一)
721 2
|
关系型数据库 MySQL Java
MySQL的问题
MySQL的问题
221 0
|
安全 Java 数据库连接
Java报错javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify解决方法
Java报错javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify解决方法
Java报错javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify解决方法
|
消息中间件 Dubbo 应用服务中间件
微服务调用中TraceId是如何传递的?
由于网络原因,我暂时无法解析提供的网页链接。请检查链接是否有效,或稍后再试。如果您有其他问题或需要帮助,请随时告诉我。
微服务调用中TraceId是如何传递的?
|
SQL 关系型数据库 MySQL
在Linux中,如何备份和恢复MySQL数据库?
在Linux中,如何备份和恢复MySQL数据库?
|
JSON 关系型数据库 MySQL
mysqlx_max_connections
mysqlx_max_connections
1237 0