生成原因
- 数据库提供的连接数已经被使用完,再连接没有被释放完前是不可能会有新的连接提供。
- 数据库可以提供多少链接,可以在my.cnf(linux)或者my.ini(windows)下设定,默认是max_connections=100。
- 在使用数据库连接的时候,会配置数据库连接池的最小连接数,最大连接数。在初始化连接池的时,配置的最小连接数就会来占据数据库提供的链接。
解决方法
- 找到my.cnf(linux)或者my.ini(windows),找到max_connections,修改默认值。
- 假设你没有这个max_connections,有可能是你的配置文件不对,笔者接手一个陌生的项目,不知道Mysql是docker安装的,需要去docker内把Mysql配置文件拷贝出来修改后,再丢进去覆盖原本的配置文件。
预防问题产生
-
修改MySQL的wait-timeout参数,默认是八小时。
- 也就是说一旦一个连接被占用,不管这个连接有没有被使用(操作数据库数据),时间长度达到八小时才会被归还(就比如公共厕所,有的人一进去就是八小时)
-
知道了问题出现的原因,那么有就很多方法来进行预防,例如连接池配置,Java项目中的数据库配置等等都可以从这方面进行入手查询资料