当前位置: 首页 > 面试题库 >

MySQL错误“连接过多”

暨弘懿
2023-03-14
问题内容

我将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个用户是更安全的选择。你们同意吗?


问题答案:

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

您的代码的作用是:

  • 打开与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询问他们之前,如果有人可以验证我刚才说的话^^



 类似资料:
  • 问题内容: 我正在使用github.com/go-sql-driver/mysql驱动程序。 我打开一个数据库: 然后我有两个函数,每个函数用下面的mysql代码调用200次: 第二: 第一个是恐慌。 当我只打开数据库一次时,如何有多个连接?如何关闭它们? 问题答案: sql.Open并没有真正打开与数据库的连接。 sql.DB维护与数据库的连接池。每次查询数据库时,程序都会尝试从该池获取连接,否

  • 我从W3Schools复制了它,当我尝试运行它时,它会给我一个错误。我是MySQL的新手,所以我正在尝试解决这个问题,但我不知道如何解决。 错误: 警告:mysqli::mysqli():(HY000/1045):用户'用户名'@'localhost'(使用密码:是)在第10行的C:\xampp\htdocs\Informatic a\test.php访问被拒绝连接失败:用户'用户名'访问被拒绝'

  • 在使用mysql连接Eclipse时出现此错误,任何人都可以提供帮助。 不建议在没有服务器身份验证的情况下建立SSL连接。 根据MySQL 5.5.45、5.6.26和5.7.6的要求,如果未设置explicit选项,默认情况下必须建立SSL连接。为了符合不使用SSL的现有应用程序,verifyServerCertificate属性设置为“false”。您需要通过设置显式禁用SSL,或者设置并为服

  • 问题内容: 祝大家有美好的一天。我有一个奇怪的错误。我创建了一个像这样的聊天: 问题/答案插入数据库 每2秒将ajax请求发送到php脚本,以获取新的问题/答案 直到今天,当我收到此错误时,它运行良好: 问题是我们不是那么多…(8),我不认为数据库不能同时支持超过8到16个连接(根据规范,聊天必须支持50-100个用户,因此8个是…小)。 所以…有人可以告诉我为什么会发生这种情况吗(昨天我们15岁

  • 我尝试通过应用服务器Glassfish和JPA连接到mysql数据库。 我的persistence.xml如下所示: 有什么问题?

  • 我尝试通过应用服务器Glassfish和JPA连接到mysql数据库。 我的persistence.xml如下所示: mysql中的“max_connections”设置为600。这样就够了。 有什么问题?