开发者社区> 问答> 正文

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

我最近发现,早先运行良好的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") . "

";

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

$start = microtime(true); mysql_query($sql, $link);

echo "query done
"; allDone();

function allDone(){ global $start, $sql;

$end = microtime(true); echo "sql : $sql
"; echo "elapsed : " . ($end - $start) . "
"; echo "
"; }

function sqlErrorHandler($errno, $errstr, $errfile, $errline){ global $link; echo "Error : $errno
$errstr
"; echo "mysql_ping : " . (mysql_ping($link) ? "LIVE" : "DEAD") . "
"; echo "
";

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 显示变量:

Variable_name=Value auto_increment_increment=1 auto_increment_offset=1 autocommit=ON automatic_sp_privileges=ON back_log=50 basedir=C:\Program Files\MySQL\MySQL Server 5.1\ big_tables=OFF binlog_cache_size=32768 binlog_format=STATEMENT bulk_insert_buffer_size=8388608 character_set_client=utf8 character_set_connection=utf8 character_set_database=latin1 character_set_filesystem=binary character_set_results=utf8 character_set_server=latin1 character_set_system=utf8 character_sets_dir=C:\Program Files\MySQL\MySQL Server 5.1\share\charsets\ collation_connection=utf8_general_ci collation_database=latin1_swedish_ci collation_server=latin1_swedish_ci completion_type=0 concurrent_insert=1 connect_timeout=10 datadir=C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\Data\ date_format=%Y-%m-%d datetime_format=%Y-%m-%d %H:%i:%s default_week_format=0 delay_key_write=ON delayed_insert_limit=100 delayed_insert_timeout=300 delayed_queue_size=1000 div_precision_increment=4 engine_condition_pushdown=ON

展开
收起
保持可爱mmm 2020-05-17 09:42:36 525 0
1 条回答
写回答
取消 提交回答
  • php选项mysql.connect_timeout是这样做的原因。它不仅用于连接超时,还用于等待服务器的第一个答案。您可以像这样增加它:

    ini_set('mysql.connect_timeout', 300); ini_set('default_socket_timeout', 300); 来源:stack overflow

    2020-05-17 09:53:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像