首頁 > 後端開發 > php教程 > 為什麼我的 MySQL 伺服器在連線後剛好 60 秒就超時?

為什麼我的 MySQL 伺服器在連線後剛好 60 秒就超時?

DDD
發布: 2024-10-18 22:07:03
原創
826 人瀏覽過

Why Does My MySQL Server Time Out at Exactly 60 Seconds After Connecting?

MySQL Server 出現「連線中斷- 剛好持續60 秒」問題的原因及解決方法

MySQL 查詢在過去可以正常執行,但現在卻在60 秒後超時並拋出錯誤,即使該查詢運行速度很慢,但作為夜間作業的一部分,這不是問題(因此,請不要建議優化查詢)。

我可以從 PHP 執行「select SLEEP(120);」來重現錯誤,如下所示。但是,從 MySQL 用戶端執行相同語句卻成功(回傳 0)。我嘗試調整 wait_timeout(設定為 28800),但沒有成功。我還重新啟動了資料庫伺服器和機器本身。

該問題總是會在恰好 60 秒時超時,這讓我認為這可能是設定問題,而不是受限資源問題。

我的運作環境如下:

  • Windows Server 2003
  • MySQL 5.1.36 社群版
  • PHP 5.3
以下是我的測試程式碼、輸出和SHOW VARIABLES 的結果:

<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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板