系统无法连接到数据库,关键取决于两个数据:
1.数据库系统允许的最大连接数。可以设置该参数。如果未设置,默认值为100。最大值是16384。
2.数据库threads_connected中的当前连接线程数。这是一个动态的变化。
有关检查max_connections和max_connections的方法,请参见下文。
如果threads _ connected==max _ connections,则数据库系统不能提供更多的连接。这时,如果程序还想创建新的连接线程,数据库系统会拒绝。如果程序没有做太多的错误处理,就会出现类似Qiangtan的错误信息。
因为创建和销毁数据库连接会消耗系统资源。而且为了避免同时打开太多的连接线程,现在编程一般都采用所谓的数据库连接池技术。
然而,数据库连接池技术无法避免程序错误导致的连接资源耗尽。
这种情况一般发生在程序没有及时释放数据库连接资源或者其他原因导致数据库连接资源无法释放的时候,但是强探系统估计不会出现这种低级编程错误。
检查此错误的一个简单方法是在刷新Qiangtan页面时不断监视threads_connected的变化。如果max_connections足够大,threads_connected的值一直增加到max_connections,那么就该检查程序了。当然,如果采用数据库连接池技术,threads_connected在达到数据库连接池最大连接线程数时不会增加。
从强坦的错误来看,更有可能是数据库系统没有配置好。这里有一些建议。供参考
要求您的工程师将mysql的最大允许连接数从默认的100调整到32000。这不会总是造成连接太多的问题。
检查最大连接数
输入MySQL并使用命令:showvariables。
查看数据库中最大连接数的变量值:max_connections
请参见线程_已连接
输入MySQL并使用命令:showstatus。
查看当前活动连接线程的变量值:threads_connected
设置最大连接数
方法是在my.cnf文件中添加以下最后一条红线:
-
[mysqld]
端口=3306
#socket=MySQL
跳跃锁定
set-variable=key_buffer=16K
set-variable=max _ allowed _ packet=1M
设置变量=线程堆栈=64K
set-variable=table_cache=4
设置变量=排序缓冲区=64K
设置变量=净缓冲区长度=2K
设置变量=最大连接数=32000
-
修改后重启MySQL即可。当然,为了确保设置正确,您应该检查max_connections。
注意:
1.虽然这里写的是32000。但是,实际MySQL服务器允许的最大连接数是16384;
2.除了max_connections,以上其他配置都要根据你的系统自身需求来配置,没必要拘泥于此;
3.增加了最大连接数,不会增加太多系统消耗。
4.如果您的mysql使用my.ini作为配置文件,设置是类似的,但是格式应该稍微修改一下。