共计 2652 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章将为大家详细讲解有关 mysql 中 Too many connections 问题怎么处理,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1、问题展现
应用端登录出现 Too many connections 报错
检查发现 mysql 数据库服务端已经达到了 max_connections 上限
mysql show variables like max_connections
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 1900 |
+—————–+——-+
1 row in set (0.00 sec)
mysql show processlist;
已经达到了 1900 会话数。
thread_pool 设置并不能阻止会话数的上升。
mysql show variables like thread_pool%
+————————————–+——-+
| Variable_name | Value |
+————————————–+——-+
| thread_pool_algorithm | 0 |
| thread_pool_high_priority_connection | 0 |
| thread_pool_max_unused_threads | 0 |
| thread_pool_prio_kickup_timer | 1000 |
| thread_pool_size | 16 |
| thread_pool_stall_limit | 6 |
+————————————–+——-+
6 rows in set (0.00 sec)
2、问题处理
重启 mysql 的服务。重启完 mysql 服务后,的确 mysql 的 session 数下降了,但是很快会话数又上升到了 1900。
判断并不是 mysql 的服务器端的会话没释放,而是 application 端的会话没释放。
重启 application 的两台服务器,mysql 的会话数恢复正常。
3、结论
先来看看 mysql 服务器端的会话保持时间:
mysql show variables like %wait_timeout%
+————————–+———-+
| Variable_name | Value |
+————————–+———-+
| innodb_lock_wait_timeout | 50 |
| lock_wait_timeout | 31536000 |
| wait_timeout | 28800 |
+————————–+———-+
3 rows in set (0.00 sec)
mysql show variables like %interactive_timeout%
+———————+——-+
| Variable_name | Value |
+———————+——-+
| interactive_timeout | 28800 |
+———————+——-+
1 row in set (0.00 sec)
interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在 mysql_real_connect()中使用 CLIENT_INTERACTIVE 选项的客户端。又见 wait_timeout
wait_timeout: 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局 wait_timeout 值或全局 interactive_timeout 值初始化会话 wait_timeout 值,取决于客户端类型 (由 mysql_real_connect() 的连接选项 CLIENT_INTERACTIVE 定义),又见 interactive_timeout
如此看来,两个变量是共同控制的,那么都必须对他们进行修改了。继续深入这两个变量 wait_timeout 的取值范围是 1 -2147483(Windows),1-31536000(linux),interactive_time 取值随 wait_timeout 变动,它们的默认值都是 28800。
MySQL 的系统变量由配置文件控制,当配置文件中不配置时,系统使用默认值,这个 28800 就是默认值。要修改就只能在配置文件里修改。Windows 下在 %MySQL HOME%/bin 下有 mysql.ini 配置文件,打开后添加两个变量,赋值。
要解决这个问题:
1、Use connection pooling at client side (in MySQL Connector) to reduce the number of active connections between the client and the server.
是在客户端安装 MySQL Connector
2、Improve the application design to reduce the number of active connections needed and to reduce the time the connection has to stay active.
从应用端去降低并发数,减少每个会话的保持时间
3、Increase the number of connections handled by MySQL server by adjusting max_connections (keep in mind that this consumes additional RAM and is still limited)
在 mysql 服务器端增加最大连接数设置,不过会消耗大量内存
建议用第二种方法。因为当前应用会话保持时间是 10 分钟,建议降低这个数值。
关于“mysql 中 Too many connections 问题怎么处理”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。