小编典典

MySQL错误“连接过多”

mysql

我将MySQL 5.0用于GoDaddy(linux)托管的网站。

我在Web应用程序上进行了一些测试,突然我发现页面刷新非常缓慢。最终,经过漫长的等待,我到达了一个页面,上面写着“
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(); ?>

我认为,这样,每次打开页面时,连接都会打开,然后在页面加载完成时关闭连接。然后,当有人单击页面上的按钮时,连接再次打开,依此类推…

编辑:

好的,所以我刚和GoDaddy下了电话。显然,通过我的经济套餐,我一次只能连接50个连接。尽管今天的问题只发生在我访问该网站的时候,但他们说他们之前遇到了一些服务器问题。但是,考虑到我的Web应用程序将拥有84个用户的方式,我可能应该升级到“豪华”,这一次允许100个连接。在某一天,一次可能会有大约30个用户访问我的网站,所以我认为100个用户是更安全的选择。你们同意吗?


阅读 372

收藏
2020-05-17

共1个答案

小编典典

共享主机提供程序通常允许同一用户进行少量同时连接。

您的代码的作用是:

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

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

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

但是请注意,您可能永远不应该使用持久连接…

两个提示:

  • 使用mysql_connect的欧洲工商管理学院mysql_pconnect (已经为您确认)
  • 将mysql_connect的第四个参数设置为false (因为它是默认值,已经为您确定) :(引用手册):

如果使用相同的参数再次调用mysql_connect(),则不会建立新的链接,而是将返回已打开的链接的链接标识符。

new_link参数修改了此行为,并使mysql_connect()始终打开新链接,即使之前使用相同参数调用了mysql_connect()也不例外。


那么,什么原因会引起问题呢?

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

如果您有许多用户同时使用该站点,并且mysql_connect连接之间的代码以及关闭连接的过程都需要花费大量时间,则意味着同时打开多个连接…您将达到极限
:- (

不过,由于您是该应用程序的唯一用户,考虑到最多允许200个同时连接,所以发生了一些奇怪的事情…


好吧,考虑“ 连接过多 ”和max_connections“ …”

如果我没有记错,max_connections不限制连接数 ,你 可以打开MySQL服务器,但 连接的总数 ,可以开博到该服务器,
任何人连接到它

引用MySQL的文档说明连接过多

如果在尝试连接到mysqld服务器时出现连接过多错误,则意味着所有可用连接正在被其他客户端使用。

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

因此,实际上,问题可能并非出自您,也不是您的代码 (实际上看起来还不错) :它可能“只是”是您不是唯一尝试连接该MySQL服务器的人
(请记住,“共享主机”) ,并且有太多人同时使用它…

如果我是对的
,那么您无能为力,无法解决问题:只要该服务器上的数据库/用户过多并且max_connection设置为200,您将继续遭受痛苦…

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

2020-05-17