Fork me on GitHub

Mysql Too many connections

错误原因

java.sql.SQLException: Cannot create PoolableConnectionFactory (Data source rejected establishment of connection,  message from server: "Too many connections")

 

修改mysql的my.ini配置文件,网上的说法:mysql安装目录下的my.ini中设定的并发连接数太少或者系统繁忙导致连接数被占满。

而项目实际上部署在linux系统上,需要找到my.cnf的配置文件,一般在etc/my.cnf,找到这个文件,[mysqld]下添加如下行:

max_connections=1000
max_user_connections=500
wait_timeout = 28800
interactive-timeout = 28800

之后重启mysql,生效。

1、使用 service 启动:
service mysqld restart 
service mysql restart (5.5.7版本命令)

2、使用 mysqld 脚本启动:
/etc/init.d/mysqld restart

    max_connections: 为设置最大的连接数

    max_user_connections:设置每用户最大的 连接数500

    wait_timeout:表示200秒后将关闭空闲连接,但对正在工作的连接不受影响。

查看连接数是否被修改

show variables like '%connection%'

max_connections代表允许连接数据库的所有用户的连接数总和,是对整个服务器的用户限制,整个服务器只能开这么多session,而不考虑用户!

max_user_connections限制每个用户的session连接个数,每个用户都可以连接,但是连接只能这么大值(用户数指root)

查看服务器线程数

show global status like 'Thread%';

 

thread_cached :代表mysql管理的线程池中还有多少可以被复用的资源

Threads_connected : 当前打开的连接的数量。(和show processlist一致)

thread_created : 代表新创建的thread(根据官方文档,如果thread_created增大迅速,需要适当调高thread_cache_size)

thread_running :代表真正在运行的(等于1一般就是这个show status命令本身)

mysql建立连接非常消耗资源,所以就有了thread_cache,当已有连接不再使用之后,mysql server不是直接断开连接,而是将已有连接转入到thread_cache中,以便下次在有create thread的需求时,可以在cache中复用,提高性能,降低资源消耗。  

当然,如果已经有了中间件或者其他的连接池管理,那么这个参数就没有那么重要了,但是如果没有其他的连接池管理,那么优化这个参数还是可以得到不错的回报的。

所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。

show full processlist;

  

 

posted @ 2020-03-16 00:29  秋夜雨巷  阅读(882)  评论(0编辑  收藏  举报