Mysql Server在PHP脚本上消失了

时间:2011-01-21 08:40:59

标签: mysql mysql-error-1064

我编写了一个脚本来批处理域并检索每个域的数据。对于检索到的每个域,它通过curl连接到远程页面,并一次检索30个域所需的数据。

此页面通常需要2到3分钟才能加载并返回卷曲结果,此时,细节会被解析并放入数组(页面排名工具函数)。

通过CRON运行此脚本后,我不断收到“MySQL服务器已消失”的错误。

任何人都可以告诉我,如果我遗漏了一些明显可能导致此事的原因吗?

// script dies after 4 mins in time for next cron to start
set_time_limit(240);

include('../include_prehead.php');

$sql = "SELECT id, url FROM domains WHERE (provider_id = 9 OR provider_id = 10) AND google_page_rank IS NULL LIMIT 30";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);

do {
$url_list[$row['id']] = $row['url'];
} while ($row = mysql_fetch_assoc($result));

// curl domain information page  - typically takes about 3 minutes
$pr = page_rank_tools($url_list);



foreach ($pr AS $p) {
// each domain
if (isset($p['google_page_rank']) && isset($p['alexa_rank']) && isset($p['links_in_yahoo']) && isset($p['links_in_google'])) {

$sql = "UPDATE domains SET google_page_rank = '".$p['google_page_rank']."' , alexa_rank = '".$p['alexa_rank']."' , links_in_yahoo = '".$p['links_in_yahoo']."' , links_in_google = '".$p['links_in_google']."' WHERE id = '".$p['id']."'";


mysql_query($sql) or die(mysql_error());

}
}

由于

CJ

3 个答案:

答案 0 :(得分:4)

这是因为MySQL连接有自己的超时,当你解析你的页面时,它结束了。您可以尝试使用

增加此超时
ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300);

(如MySQL server has gone away - in exactly 60 seconds中所述)

或者再次调用mysql_connect()。

答案 1 :(得分:2)

因为卷曲花费的时间太长,您可以考虑再次连接数据库,然后再输入LOOP进行更新

答案 2 :(得分:0)

发生此错误的原因有很多。看到这里的列表,它可能是你很容易修复的东西 MySQL Server has gone away