今天生产服务器上的MySQL出现了一个不算太陌生的错误“Too many connections”。平常碰到这个问题,我基本上是修改/etc/my.cnf的max_connections参数,然后重启数据库。但
是生产服务器上数据库又不能随便重启。
没办法,只好想办法手动去释放一些没用的连接。
登陆到MySQL的提示符下,数据show processlist这个命令,可以得到所以连接到这个服务器上的MySQL连接(默认会有一些数据库连接池的连接):
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| 1180421 | ur | 202.103.96.68:49754 | test1 | Sleep | 1 | | NULL |
| 1180427 | ur | 202.103.96.68:55079 | test2 | Sleep | 1 | | NULL |
| 1180429 | ur | 202.103.96.68:55187 | testdba | Sleep | 0 | | NULL |
| 1180431 | ur | 202.103.96.68:55704 | testdba | Sleep | 0 | | NULL |
| 1180437 | ur | 202.103.96.68:32825 | test1 | Sleep | 1 | | NULL |
| 1180469 | ur | 202.103.96.68:58073 | testdba | Sleep | 0 | | NULL |
| 1180472 | ur | 83.136.93.131:47613 | test2 | Sleep | 8 | | NULL |
| 1180475 | root | localhost | NULL | Query | 0 | NULL | show PROCESSLIST |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
8 rows in set (0.00 sec)
mysql>
然后,你可以看到像上面这样的MySQL数据连接列表,而且每一个都会有一个进程ID号(在上表的第一列)。我们只要输入这样的命令:
Query OK, 0 rows affected (0.00 sec)
mysql>
其中1180421为你在进程列表里找到并且要杀掉的进程号。
产生这种问题的原因是:
连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout 都有关系。wait_timeout 的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。
解决方法:
修改MySQL配置文件/etc/my.cnf,设置成max_connections=1000,wait_timeout=5。如果没有此项设置可以自行添加,修改后重启MySQL服务即可。要不经常性报此错误,则要对服务器作整体性能优化
注:
为了防止发生too many connections时候无法登录的问题,mysql manual有如下的说明:
mysqld actually allows max_connections+1
clients to connect. The extra connection is reserved for use by accounts that have the SUPER
privilege. By granting the SUPER
privilege to administrators and not to normal users (who should not need it), an administrator can connect to the server and use SHOW PROCESSLIST
to diagnose problems even if the maximum number of unprivileged clients are connected.
因此, 必须只赋予root用户的SUPER权限,同时所有数据库连接的帐户不能赋予SUPER权限。前面说到的报错后无法登录就是由于我们的应用程序直接配置的root用户
总结,解决问题的最终方法:
1.修改配置文件/etc/my.cnf,调整连接参数
2.检查程序代码,对于没有关闭的链接及时进行关闭
相关推荐
MySQL数据库在运行过程中可能会遇到“Too many connections”的错误提示,这意味着服务器上的MySQL实例达到了其最大允许的并发连接数。此问题通常由以下两种情况引起: 1. **并发连接过多**:大量的应用程序或用户...
mysql官方告诉我们需要修改max_connections的值,那么我们怎么去修改呢?有两种方法 1、修改配置文件文件 修改/etc/my.cnf这个文件,在[mysqld]中新增max_connections=N,如果你没有这个文件请从编译源码中的support...
总之,“Too many connections”错误可以通过优化应用程序、调整MySQL配置、监控连接状态以及提升服务器性能等多方面进行解决。关键在于平衡并发连接需求与服务器资源的使用,确保数据库系统的稳定性和高效性。
MySQL错误“Too many connections”是数据库用户在尝试建立新的连接时遇到的一个常见问题,提示数据库当前可用的连接已达到上限。这通常是由于以下几种情况引起的: 1. **配置限制**:MySQL服务器允许的最大连接数...
总结来说,解决Too many connections的问题需要综合考虑Linux系统层面的文件句柄限制和MySQL配置层面的最大连接数设置。同时,通过ulimit命令来调整每个进程的资源限制,也是保证系统稳定运行的一个重要手段。调整...
总结来说,遇到“Too many connections”这类数据库连接问题,我们应当从以下几个方面着手分析和解决: 1. 查看数据库的max_connections配置值,确认是否达到了预设的最大连接数。 2. 检查数据库的启动日志和错误...
MySQL是一个广泛使用的关系型数据库管理系统(RDBMS),它是一个开源软件,由瑞典MySQL AB公司开发,现在由Oracle公司维护。MySQL以其高性能、可靠性和易用性而闻名,支持多种操作系统,包括Linux、Windows和macOS。...
MySQL中的"Too many open connections"错误是数据库管理员经常遇到的问题,它意味着当前的MySQL服务器已经达到了其允许的最大并发连接数。这个限制是由`max_connections`系统变量设定的,它定义了MySQL服务器可以...
ERROR 1040 (08004): Too many connections 解决办法,这也是centos7下修改mysql连接数的做法: 1)临时修改 MariaDB [(none)]> show variables like “max_connections”; +—————–+——-+ | Variable_name ...
解决方法是修改/etc/mysql/my.cnf,添加... 以下是mysql.com网站的相关说明: If you get a Too many connections error when you try to connect to the mysqld server, this means that all available connections are
理解“Too many connections”错误背后的原理,有助于我们更有效地预防和解决问题。通过合理配置数据库参数、采用连接池技术、优化代码以及实施有效的监控策略,我们可以显著提高系统的稳定性和性能。
总之,"Too many connections"错误的解决需要综合考虑代码优化、数据库配置调整、连接池管理以及系统监控等多个方面。通过系统性的排查和改进,可以有效地防止此类问题的发生,确保数据库系统的稳定运行。
MySQL中的“Too many connections”错误通常发生在服务器上可用的连接数全部被客户端占用时,这意味着不能再接受新的连接请求。此问题通常与两个主要因素有关:MySQL服务器的最大连接数限制和客户端应用程序的连接...
如果`max_connections`设置过小,可能会频繁出现“Too many connections”的错误,这时就需要增加该参数的值以允许更多的并发连接。 检查`max_connections`当前值,可以使用SQL语句`SHOW VARIABLES LIKE "max_...
MySQL数据库在运行过程中可能会遇到“Too many connections”的错误,这表示当前系统已经达到其允许的最大连接数。默认情况下,MySQL的最大连接数是100,但根据需求,这个限制可以被调整到最高16384。理解如何修改这...