我有一个尝试记录某些数据的脚本(通常一次大约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函数的检查,并且它报告成功(至少我没有在输出中得到“失败”)。
答案 0 :(得分:1)
查看表结构和索引 - 随着表的增长,写入数据可能需要更长时间。 200-300 kB听起来相当一些数据,并且会迅速累积(每3-4次更新1 MB)。
此外,让您的MySQL slow query log能够准确了解缓慢进入系统的位置。
答案 1 :(得分:0)
验尸:
显然,这个解决方案与我收到的错误代码几乎没有关系。事实证明,我试图释放一些空间,取出了一张多余的桌子。好吧,我没有意识到的是另一个开发人员有一个填充此表的触发器。在我在原始问题中引用的代码块下面的块中的查询中涉及的表上插入了触发器。我注意到的是,代码第一次执行正常,然后失败了。发生的事情是触发错误以某种方式杀死了与服务器的连接。在删除触发器后,脚本开始运行就好了。
我仍然不确定为什么重做连接不允许它继续进行并像第一次迭代那样行事。