360截图20230103131153446.jpg

Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行

mysql> show variables like '%max_connection%'; 

| Variable_name   | Value | 

max_connections | 151   |  

mysql> set global max_connections=1;Query OK, 0 rows affected (0.00 sec) 

[root@node4 ~]# mysql -uzs -p123456 -h 192.168.56.132 

ERROR 1040 (00000): Too many connections 

二、解决思路

1、首先先要考虑在我们 MySQL 数据库参数文件里面,对应的 max_connections 这个参数值是不是设置的太小了,导致客户端连接数超过了数据库所承受的最大值。

该值默认大小是 151,我们可以根据实际情况进行调整。

三、解决办法

set global max_connections=500

1.但这样调整会有隐患,因为我们无法确认数据库是否可以承担这么大的连接压力,就好比原来一个人只能吃一个馒头,但现在却非要让他吃 10 个,他肯定接受不了。反应到服务器上面,就有可能会出现宕机的可能。

2、其次可以限制 Innodb 的并发处理数量,如果 innodb_thread_concurrency = 0(这种代表不受限制) 可以先改成 16 或是 64 看服务器压力。

3.如果非常大,可以先改的小一点让服务器的压力下来之后,然后再慢慢增大,根据自己的业务而定,个人建议可以先调整为 16 即可。

4.MySQL 随着连接数的增加性能是会下降的,在 MySQL 5.7 之前都需要让开发配合设置 thread pool,连接复用。MySQL 5.7 之后数据库自带 thread pool 了,连接数问题也得到了相应的解决。

对于有的监控程序会读取 information_schema 下面的表,可以考虑关闭下面的参数:

innodb_stats_on_metadata=0

set global innodb_stats_on_metadata=