0

我有一个脚本试图记录一些数据(通常一次大约 200-300kb)。它已经运行了很长一段时间。我不知道对处理服务器上的 MySQL 服务器或 PHP 所做的任何配置更改。昨天,以下代码块开始出现异常。两天前,“$sqlBucket”查询运行良好。现在,它失败了,mysql_error 返回“MySQL 服务器已消失”。我在第一个 if 块中添加了调试,它输出:

The Link Is Down
Link still down

编码:

if (!mysql_ping($conn))  {
   echo "The Link Is Down!\n";
   mysql_close($conn);
   if (!($conn = mysql_connect($hostname,$username,$password))) echo "Fail " . $mysql_error() . "\n";
   mysql_select_db($db,$conn);
   if (!mysql_ping($conn)) echo "Link still down\n";
}
if (!mysql_query($sqlBucket, $conn)) {
    echo "Could not execute: {$sqlBucket}" . mysql_error() . "\n";
}

如果有人对检查、调试、重新配置等有任何想法,我已经没有想法了。谢谢。

编辑:额外信息

该脚本在约 3 秒内执行并失败。

MySQL 服务器上的 wait_timeout 值为 28800。

我能够通过命令行成功发送查询。

我在 mysql_connect 函数上添加了一个检查,它报告成功(至少我没有在输出中得到“失败”)。

4

2 回答 2

1

查看表结构和索引 - 随着表的增长,写入数据可能需要更长的时间。200-300 kB 听起来是相当多的数据,而且会迅速累积(每 3-4 次更新 1 MB)。

此外,启用您的 MySQL慢查询日志,以准确查看慢速进入系统的位置。

于 2013-01-24T04:29:20.813 回答
0

验尸:

显然,这个解决方案与我收到的错误代码几乎没有关系。事实证明,为了腾出一些空间,我搬走了一张多余的桌子。好吧,我没有意识到另一个开发人员有一个触发器正在填充这个表。触发器被调用以插入我在原始问题中引用的代码块下方的块中参与查询的表上。我注意到的是代码第一次执行得很好,然后就失败了。发生的事情是触发错误以某种方式终止了与服务器的连接。放下触发器后,脚本开始运行得很好。

我仍然不确定为什么重做连接不允许它继续进行并且像第一次迭代期间那样运行。

于 2013-01-28T16:24:00.670 回答