MySQL Server 出現「連線中斷- 剛好持續60 秒」問題的原因及解決方法
MySQL 查詢在過去可以正常執行,但現在卻在60 秒後超時並拋出錯誤,即使該查詢運行速度很慢,但作為夜間作業的一部分,這不是問題(因此,請不要建議優化查詢)。
我可以從 PHP 執行「select SLEEP(120);」來重現錯誤,如下所示。但是,從 MySQL 用戶端執行相同語句卻成功(回傳 0)。我嘗試調整 wait_timeout(設定為 28800),但沒有成功。我還重新啟動了資料庫伺服器和機器本身。
該問題總是會在恰好 60 秒時超時,這讓我認為這可能是設定問題,而不是受限資源問題。
我的運作環境如下:
<code class="php">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(); }</code>
OUTPUT : 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
以上是為什麼我的 MySQL 伺服器在連線後剛好 60 秒就超時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!