MySQL服务器消失了-恰好60秒

我最近发现,早先运行良好的SQL查询现在在60秒后超时并引发错误。该查询速度很慢,但是作为日常工作的一部分运行,因此它本身不是问题(因此请不要建议我对其进行优化)。


通过运行“ select SLEEP(120);”,我能够一致地重现该错误。从PHP如下所示。但是,从MySQL客户端运行相同的语句成功(返回0)。我试过调整wait_timeout(设置为28800),但是没有运气。我还重新启动了数据库服务器和计算机本身。


它总是总是在60秒后超时的事实向我表明,这很可能是一种设置,而不是有限的资源问题。


我正在运行:

Windows Server 2003

MySql 5.1.36-社区

PHP 5.3


以下是我的测试代码,SHOW VARIABLES的输出和结果


谢谢!


码:


set_error_handler("sqlErrorHandler");

set_time_limit(12000);



$link = mysql_connect("$MYSQL_Host","$MYSQL_User","$MYSQL_Pass");

mysql_select_db($MYSQL_db, $link);


echo "mysql_ping = " . (mysql_ping($link) ? "LIVE" : "DEAD") . "<br /><br />"; 


$sql = "SELECT SLEEP(120);";


$start = microtime(true);

mysql_query($sql, $link);


echo "**query done**<br />";

allDone();


function allDone(){

 global $start, $sql;


 $end = microtime(true);

 echo "sql : $sql<br />";

 echo "elapsed : " . ($end - $start) . "<br />";

 echo "<br />";

}


function sqlErrorHandler($errno, $errstr, $errfile, $errline){

 global $link;

 echo "Error : $errno<br />$errstr<br />";

 echo "mysql_ping : " . (mysql_ping($link) ? "LIVE" : "DEAD") . "<br />"; 

 echo "<br />";


 allDone();

}

输出:


mysql_ping = LIVE


Error : 2

mysql_query() [function.mysql-query]: MySQL server has gone away

mysql_ping : DEAD


sql : SELECT SLEEP(120);

elapsed : 60.051116943359


Error : 2

mysql_query() [function.mysql-query]: Error reading result set's header

mysql_ping : DEAD


sql : SELECT SLEEP(120);

elapsed : 60.0511469841


**query done**

sql : SELECT SLEEP(120);

elapsed : 60.051155090332


LEATH
浏览 528回答 3
3回答

回首忆惘然

当我遇到此问题时,它不是由wait_timeout(设置为默认的8小时)引起的,而是由具有大型INSERT语句的max_allowed_packet引起的。从PHP更改max_allowed_packet无效,但是当我在/etc/my.cnf的mysqld部分中更改它并重新启动MySQL服务器时,问题消失了。
打开App,查看更多内容
随时随地看视频慕课网APP