簡體   English   中英

在 PHP 中獲取“MySQL 服務器已經消失”,即使我正在關閉我的數據庫連接

[英]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 服務器中始終保持活動狀態,我也願意接受這個想法。

如果數據庫連接超時(可能是自上次使用連接以來的長時間運行過程),您將收到此錯誤。

您可以使用單個命令輕松檢查連接並在必要時恢復它:

$mysqli->ping()

此錯誤意味着與 DBMS 的連接已建立,但隨后丟失。 我運行的站點有數百個並發連接到同一個數據庫實例,每分鍾處理數千個查詢,並且只有在管理員故意終止查詢時才看到此錯誤。 您應該檢查交互式超時的配置並閱讀服務器日志。

鑒於您對錯誤的描述(您確實需要收集更多數據並描述錯誤的情況),唯一能想到的解釋是某處存在死鎖。

我會質疑在每條消息之后關閉連接是否有任何好處(取決於系統的使用情況)。 文藝鳳凰的評論有些糊塗。 但是,如果存在容量問題,那么我建議對您現有的打開/關閉模型使用持久連接,但我懷疑這與您在此處描述的問題有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM