MySQL错误"连接太多"

lit*_*leK 21 php mysql connection

我正在使用MySQL 5.0作为由GoDaddy(linux)托管的站点.

我正在对我的网络应用程序进行一些测试,突然间我注意到页面刷新的速度非常慢.最后,经过漫长的等待,我得到了一个页面,上面写着"MySQL错误,连接太多......"的内容,它指向我连接数据库的config.php文件.

它只是我连接到数据库,没有其他用户.在我的每个页面上,我在顶部包含config.php文件,并关闭页面末尾的mysql连接.两者之间可能存在多个查询.我担心我没有足够关闭mysql连接(mysql_close()).

但是,当我在运行查询后尝试关闭它们时,我在页面上收到连接错误.我的页面是PHP和HTML.当我尝试关闭查询时,似乎下一个查询将无法连接.我必须在关闭后再次包含config.php才能连接吗?

这个错误吓到了我,因为在2周内,大约有84人开始使用这个Web应用程序.

谢谢.

编辑:

这是我的页面的一些伪代码:

 require_once('../scripts/config.php');

 <?php
    mysql_query..

    if(this button is pressed){
       mysql_query...
    }
    if(this button is pressed){
       mysql_query...
    }
    if(this button is pressed){
       mysql_query...
    }
 ?>
 some html..
 ..
 ..
 ..
 ..
 <?php
   another mysql_query...
 ?>
 some more html..
 ..
 ..
 <?php mysql_close(); ?>
Run Code Online (Sandbox Code Playgroud)

我想通过这种方式,每次页面打开时,连接都会打开,然后在页面加载完成后关闭连接.然后,当有人单击页面上的按钮时,连接再次打开,依此类推......

编辑:

好的,所以我刚刚和GoDaddy通电话.显然,通过我的经济套餐,我一次只限50个连接.虽然今天我的问题发生在只有我访问该网站时,他们说他们之前遇到了一些服务器问题.然而,看到我将如何为我的网络应用程序拥有84个用户,我应该升级到"Deluxe",它允许一次100个连接.在某一天,可能有大约30个用户一次访问我的网站,所以我认为100将是一个更安全的赌注.你们同意吗?

Pas*_*TIN 33

共享主机提供商通常允许同一用户的少量同时连接.

你的代码做的是:

  • 打开与MySQL服务器的连接
  • 做它的东西(生成页面)
  • 关闭页面末尾的连接.

最后一步,在页面末尾完成时不是强制性的 :(引用mysql_close手册):

通常不需要使用mysql_close(),因为非持久性打开链接会在脚本执行结束时自动关闭.

但请注意,您可能不应该使用持久连接...

两个提示:

  • 使用mysql_connectinsead mysql_pconnect (已经可以了)
  • 将mysql_connect的第四个参数设置为false (已经可以,因为它是默认值) :(引用手册):

如果使用相同的参数对mysql_connect()进行第二次调用,则不会建立新的链接,而是返回已打开的链接的链接标识符.

new_link参数修改了这种行为,并使mysql_connect()始终打开一个新的链接,即使之前使用相同的参数调用了mysql_connect().



什么可能导致问题呢?

也许您正在尝试并行访问多个页面(例如,在浏览器中使用多个选项卡),这将同时模拟几个使用该网站的用户?

如果您有许多用户同时使用该网站,并且mysql_connect连接之间的代码和关闭连接需要花费大量时间,那么将意味着同时打开许多连接...并且您将达到限制: - (

尽管如此,由于您是该应用程序的唯一用户,考虑到您允许多达200个同时连接,有一些奇怪的事情......



那么,考虑" 太多连接 "和" max_connections"......

如果我没记错的话,max_connections不限制可以打开到MySQL服务器的连接数,但是连接到该服务器的任何人都可以连接到该服务器的连接总数.

引用MySQL关于太多连接的文档:

如果在尝试连接到mysqld服务器时出现Too many connections错误,则表示其他客户端正在使用所有可用连接.

允许的连接数由max_connections系统变量控制.其默认值为100.如果需要支持更多连接,则应为此变量设置更大的值.

所以,实际上,问题可能不是来自你或你的代码(看起来很好,实际上):它可能"只是"你不是唯一一个试图连接到MySQL服务器(记住,"共享主机"),并且有太多人同时使用它......

... 如果我是对的,就是这样,你无法解决问题:只要该服务器上的数据库/用户太多而且max_connection设置为200,你就会继续受苦...


作为旁注:在回到GoDaddy询问他们之前,如果有人可以验证我刚刚说的话会很好^^