MySQL 伺服器已消失- 與預期情況相差60 秒
本文討論了導致MySQL 伺服器在執行持續120 秒的查詢時經過60 秒後超時並引發錯誤的問題。儘管查詢運行正常,但 PHP 腳本中的一個問題導致了這個錯誤。
問題症狀
- 透過 PHP 執行查詢 SELECT SLEEP(120); 在 60 秒後逾時。
- 從 MySQL 用戶端執行相同查詢成功執行。
- 每次超時的時間都是固定的 60 秒,這表明它可能是設定問題,而不是資源限制。
系統設定
- Windows Server 2003
- MySql 5.1.36-community
- MySql 5.1.36-community
MySql 5.1.36-community
MySql 5.1.36-community
MySql 5.1.36-community
MySql 5.1.36-community
MySql 5.1.36-community
5.3
分析
ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300);
登入後複製
檢查 SHOW VARIABLES 輸出後,發現 wait_timeout 已設定為 28800(480 分鐘),但錯誤仍存在。這表示 wait_timeout 不是問題所在。 解決方案問題的原因是 PHP 選項 mysql.connect_timeout。此選項不僅用於連接逾時,還用於等待來自伺服器的第一個回應。由於查詢持續時間設定為 120 秒,而 mysql.connect_timeout 預設為 60 秒,因此伺服器在 60 秒後關閉連接,導致錯誤。 透過將 mysql.connect_timeout 增加到至少 120 秒,解決了此問題。這透過以下程式碼實現:這將 mysql.connect_timeout 增加到 300 秒,避免了在等待伺服器回應時 premature 關閉連線。
以上是為什麼我的 MySQL 查詢在 60 秒後逾時,儘管「wait_timeout」要高得多?的詳細內容。更多資訊請關注PHP中文網其他相關文章!