关于MYSQL数据库提示max_user_connections的错误解决办法

2013/10/2 19:19:44 | 阅24691 来源:好空间网络 [打印] [关闭]
 

很多用户在使用工具数据库的时候经常会遇到ERROR 1226 (42000): User 'dbjavams' has exceeded the 'max_user_connections' resource (current value: 20) 这个提示
如图:


提示说明: 这个提示是说连接数据库的并发超出 20个限定,所以不能在增加新的数据库连接!

小提示:使用jsp连接却没有问题,出现这个提示只是管理软件不能连接到数据库上,而网站却不受影响!


为什么会出现这个提示呢?? 
那是因为我们的jsp虚拟主机所有的数据库都有数据库并发的限制,比如个人A型jsp空间他的数据库并发的限制就是20个,如果您超出了20个数据库连接,第21个数据库的连接就不会被允许
这个问题一般是由于,您使用了数据库连接池造成的,我们的数据库并发限制是20个 ,您在您程序里面设置数据库连接池的最大连接是大于20个的话就会有这个提示出现!


应该怎么解决这个问题?
   1: 把数据库连接池最大设置为18或者19,把最小连接设置为5 初始连接设置为5  停止tomcat等5分钟 (中间等5分钟数据库会自动释放以前被占满的数据库连接) 在启动tomcat,即可解决这个问题

   2:关闭数据库连接池功能,使用jdbc直接连接数据库,这个问题就不会在出现(前提是每次连接数据库都会自动释放数据库连接,否则只申请数据库连接用完了却不释放数据库连接,20个数据库并发很快会用完)

 

高级部分:

 什么是数据库并发?? 
     数据库并发是指数据库可以同时被多少人操作,我们的每款jsp虚拟主机他的数据库并发限制都不一样, 比如您有20个数据库连接,当您jsp网页每调用一次数据库,他的这个数据库连接都会保存到我们的数据库系统里面,您jsp里调用完了这个数据库,调用 stmt.close(); conn.close(); 释放这个数据库连接,这个数据库连接才会消失,这样是一个完整的数据库并发!

比如用户从打开一个jsp网页到加载完毕用了1秒的时间,你们可以简单的理解为数据库并发的操作是1秒钟可以有20个人同时访问!! 如果您的jsp网页里面多次连接了数据库(5次),,那么就说明在1秒内,可以有4个人同时访问这个jsp网页! 

所以很多人问,数据库并发是多长时间可以允许多少人访问,这个真很难回答,和网页连接了多少次数据库有关系和每次访问的加载时间 和用户的网速也有关系! 原理已经和大家说了,大家自己判断!


上面说的是正常情况下,还有一种可能是,部分用户申请完数据库连接后,忘记关闭这个数据库连接(这样的问题由于程序员的大意也是时有发生的),
如果您的代码一不小心忘记关闭数据库的连接,你们这个数据库连接就会一直保存着,直到他自动释放(我们公司的数据库自动释放时间是8小时),如果您大意忘记释放他,他就会占用您20个连接里面的1个连接,一直到20个并发用完,就会出现上面的那个提示!

由于我们的系统是8小时才自动释放,如果您忘记关闭数据库连接,你们就说明是8个小时才可以有20个数据库并发,这个是很恐怖的会严重影响您网站的访问…… 为此很多用户选择使用数据库连接池技术,来避免上述的问题发生!


什么是数据库连接池??
   数据库连接池是不需要用户申请和释放数据库的连接,他会自动帮您管理数据库的连接用户只管使用这个连接,连接池呢会自动释放已经用过的连接,当连接不够用的时候他会自动申请新的连接,这样循环周而复始,保证数据库连接的可用性!!!大家可以理解为连接池是自动帮助用户管理数据库的连接的地方,这样就不会发生上面的数据库连接忘记关闭的问题

  数据库连接池会在tomcat启动的时候就自动申请好数据库连接(申请多少数据库连接根据您的配置文件里设置的决定的),放在一个虚拟的池子里面,您调用数据库的时候从这个池子里拿,用完了池子会自动回收你已经用过的这个连接,为下一个连接做准备!

  使用了数据库连接池,连接池会有一个配置文件,配置文件里可以规定他在启动的时候申请最大多少个连接,最小多少个连接,初始多少个连接,一个连接可以存活多久等!!


为什么限制我的并发??
   由于越来越多的人使用数据库连接池,很多人会设置最大连接数比较大,几百,几千的都有,为了达到公平的效果…我们会限制每个用户最大数据库并发数,如果您设置的最大连接数超出了我们的限制,你们则以我们的为准,比如:您的限制是20个并发,您在程序里设置最大100个并发,那么您连接池实际可申请的最大并发为20个,这个时候您启动tomcat,可以正常的访问您的网站,但是您用工具去连接管理数据库,则连接不上出现上述提示!原因是20个数据库连接已经被您用完,没办法在进行连接管理数据库了!!

连接池应该设置多少比较合适?
   以20个并发为例子 连接池我们建议设置 
最大连接为:19
最小连接为:5
初始连接为:5
过期时间为:120秒
如果并发是30个的话只需要把上面的最大连接数设置为29个即可,其他的不变!!
如果把最小连接数和初始连接数设置过大,则会影响数据库连接池的性能,弄巧成拙!

关于数据库连接池的更具体的设置请看 http://www.jspkongjian.net/news.jsp?id=790

如何查看我占用了多少数据库连接?
以navicat工具为例子讲解,如果不会操作这个工具的,可以看下我们的另外个教程http://www.jspkongjian.net/news.jsp?id=687里面有详细的如何下载和使用这个工具的办法!这里将不在做特别说明

关闭tomcat,然后打开navicat.exe 连接上远程的数据库, 连接成功后点 工具 有个服务器监控 如图:


打开后在左边把您自己的数据库连接勾选上,如图:

这样大家以后就可以随时查看自己的并发数了…..如果您的数据库连接池最大设置为 100 会在这里看见只有20个,,, 

如果您没有用数据库连接池技术,在这里可以看见您现在的数据库并发,还可以结束这些数据库并发!!如没有用数据库连接池的情况下这里的数据库并发比较多,你们就说明您的程序有地方没有释放数据库连接,需要检查程序了!!!

最新评论
  • 捷星网络:
    就有一个人用,怎么也提示这个错误呢??应该呀
    管理员回复:亲,这个和多少人用没有关系,连接池是在tomcat一启动的时候就自动加载最大连接数,所以和多少人用没有关系,请把连接池最大连接数调为19即可!这个需要修改程序的!
    评论时间:2013/11/3 11:3:9
  • 这家伙真懒:
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 我的最近报这个错误比较多,是什么原因呢?
    管理员回复:(1)大量数据访问情况下,mysql connection连接有可能失效 (2)长时间不妨问,一般超过8小时connection会失效 (3) 建议在使用这个老价钱先检查这个连接是否可用
    评论时间:2013/12/9 15:48:24
  • 胡雨:
    为什么我把最大连接设置为19了,连接还是这个问题呢?
    管理员回复:亲,修改后需要重启tomcat,在连接看看!修改了配置文件是需要重启的!
    评论时间:2015/5/6 8:51:15
经营许可证ICP:皖B2-20100052 公司邮箱:zcdnsz@jspkongjian.net
Copyright © 2004-2015, 安徽好空间网络科技有限公司 版权所有 , 本站素材部分来源于网络,如有侵权请告知删除。