[英]Getting “MySQL Server has gone away” in PHP, even if I'm closing my database connection
我有一個可以通過 Telnet 連接的 PHP 套接字服務器。 連接后,我能夠以某種格式發送消息並將它們保存在數據庫中。
發生的情況是,當 PHP Socket 收到消息時,它打開一個數據庫連接,執行查詢,然后關閉連接。 當它收到另一條消息時,它再次打開連接,執行查詢,然后關閉連接。
到目前為止,當我以 5-10 分鍾的時間間隔發送消息時,這是有效的。 然而,當間隔增加一個多小時左右時,我得到一個MySQL Server has gone away
錯誤。
經過一些研究,常見的解決方案似乎是增加等待時間,這對我來說不是一個選擇。 PHP Socket 服務器應該是 24/7 全天候開放的,我懷疑是否有辦法將等待時間增加到無窮大。
另一種選擇是檢查 PHP 本身是否 MySQL 服務器已經消失,並根據結果重置 MySQL 服務器,並嘗試再次建立連接。
有誰知道如何在 PHP 中做到這一點? 或者,如果有人有其他方法可以使 MySQL 服務器在 PHP Socket 服務器中始終保持活動狀態,我也願意接受這個想法。
此錯誤意味着與 DBMS 的連接已建立,但隨后丟失。 我運行的站點有數百個並發連接到同一個數據庫實例,每分鍾處理數千個查詢,並且只有在管理員故意終止查詢時才看到此錯誤。 您應該檢查交互式超時的配置並閱讀服務器日志。
鑒於您對錯誤的描述(您確實需要收集更多數據並描述錯誤的情況),唯一能想到的解釋是某處存在死鎖。
我會質疑在每條消息之后關閉連接是否有任何好處(取決於系統的使用情況)。 文藝鳳凰的評論有些糊塗。 但是,如果存在容量問題,那么我建議對您現有的打開/關閉模型使用持久連接,但我懷疑這與您在此處描述的問題有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.