为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

LEATH 2019-12-17 15:24:16
我最近发现,早先运行良好的SQL查询现在在60秒后超时并引发错误。该查询速度很慢,但是作为日常工作的一部分运行,因此它本身不是问题(因此请不要建议我对其进行优化)。通过运行“ select SLEEP(120);”,我能够一致地重现该错误。从PHP如下所示。但是,从MySQL客户端运行相同的语句成功(返回0)。我试过调整wait_timeout(设置为28800),但是没有运气。我还重新启动了数据库服务器和计算机本身。它总是总是在60秒后超时的事实向我表明,这很可能是一种设置,而不是有限的资源问题。我正在运行:Windows Server 2003MySql 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 = LIVEError : 2mysql_query() [function.mysql-query]: MySQL server has gone awaymysql_ping : DEADsql : SELECT SLEEP(120);elapsed : 60.051116943359Error : 2mysql_query() [function.mysql-query]: Error reading result set's headermysql_ping : DEADsql : SELECT SLEEP(120);elapsed : 60.0511469841**query done**sql : SELECT SLEEP(120);elapsed : 60.051155090332
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

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


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 549 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信