【问题标题】:Can a mysql query error be caused by a server/hosting?服务器/主机会导致 mysql 查询错误吗?
【发布时间】:2011-12-07 10:34:11
【问题描述】:

我在共享服务器上设置了 CS-CART 电子商务。最近它遇到了一些问题,我遇到了 mysql 错误,比如这些:

PHP Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/mp/public_html/core/db/mysql.php on line 53
PHP Warning: mysql_errno(): supplied argument is not a valid MySQL-Link resource in /home/mp/public_html/core/db/mysql.php on line 57
PHP Warning: mysql_errno(): supplied argument is not a valid MySQL-Link resource in /home/mp/public_html/core/db/mysql.php on line 57
PHP Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in /home/mp/public_html/core/db/mysql.php on line 64
PHP Warning: mysql_errno(): supplied argument is not a valid MySQL-Link resource in /home/mp/public_html/core/db/mysql.php on line 127

奇怪的是,我在随机页面上随机收到错误。它不是出现在某个页面上或做某件事之后。

为了让事情变得更复杂,这只是有时会发生。有没有可能是服务器/mysql进程造成的?

例如,网站现在加载非常好,所有功能都完美运行 - 我测试了大部分功能、页面,但没有收到错误。几个小时前,一切都加载缓慢,一些页面返回了上述错误。

我们将不胜感激。 谢谢。

【问题讨论】:

    标签: php mysql cs-cart


    【解决方案1】:

    如果无法访问 MySQL 服务器并且未实施 PHP 错误处理来预测这种情况,则可能会发生此类错误。 mysql_connect() 作为指向数据库服务器的 MySQL 资源指针返回,但前提是连接确实有效。如果不是,则资源指针为空,并且进一步向下运行开始抱怨,这就是您在那里看到的。如果这种情况只是间歇性发生,这是 MySQL 服务器过载的典型迹象。

    如果您使用的是共享托管服务器,则很可能其他租户有时会耗尽所有资源,因此您无能为力。但是您可以做一些事情来进一步追踪问题。如果您的 phpMyAdmin 界面允许您访问状态选项卡,您可以使用它来深入了解 MySQL 服务器的状态。

    例如,查看它执行的查询数,以及它允许​​的同时连接数。有时,连接被拒绝,因为最大连接数已用尽(某些托管环境允许您更改此设置)。服务器还会跟踪故障统计信息,它可能会为您提供一些关于正在发生的事情的线索。

    但是,如果您无权访问这些统计信息,或者无法更改服务器上的任何设置,并且您充分确定您的应用不会导致流量过载,您可能应该向您的主机开具支持票提供者。

    【讨论】:

    • 我认为这可能是原因。这些错误太随机了,不可能来自其他东西。会不会是一个糟糕的 SQL 查询挂起 mysql 进程?例如,一旦查询运行,mysql 进程就会超载,所有其他查询都会运行缓慢,甚至返回错误。 mysql进程是否有超时或类似情况?
    • 是的,这绝对是一个缓慢的查询。状态页面还向您显示运行缓慢的查询以及它们发生的频率。虽然大多数 PHP 环境都有每个请求的超时时间(通常在 30 到 60 秒之间),但 MySQL 查询没有。因此,即使最初调用它们的进程早已死去,也绝对有可能出现僵尸查询。同样,在共享托管环境中,您绝对有可能在这里为他人的罪孽而受苦。
    • 其他人也提到这 - dev.mysql.com/doc/refman/5.0/en/gone-away.html - 可能是问题所在。你怎么看?
    • 我不知道 CS-CART(或它可能存在的错误),但在正常情况下不应该发生这种情况。您可以尝试通过记录每个 mysql_connect() 调用来测试这一点,并查看在执行请求时连接是否消失。看看这是否总是发生在同一页面上还是在执行相同的操作时也可能是值得的。记录这样的事情很可能需要您进入源文件,在那里放置记录调用。
    • 您还可以通过调用 Apache Bench 来测试您的应用程序和服务器。这对应用程序造成了数千个请求。如果您看到在此期间出现的错误,则说明您遇到了问题。
    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2014-04-16
    • 2017-08-14
    • 1970-01-01
    • 2018-03-23
    相关资源
    最近更新 更多