在專案開發中,開啟 PHP 的慢速日誌(request_slowlog_timeout = 10s)是我們的標準配置,它幫助我們發現並解決了許多效能瓶頸。然而,最近卻遇到一個極其詭異的問題:正是這個功能導致了 MySQL 連線異常中斷,迫使我們不得不暫時關閉它。
後台執行一個長時間運行的腳本時,程式會拋出 2013 (Lost connection to MySQL server during query) 錯誤。具體情況如下:
mysql_ping() 進行連線檢測與重連,但問題依舊存在。在百思不得其解之際,我們嘗試關閉 PHP 的慢速日誌功能。結果令人驚訝:問題立即消失,程式恢復正常運行。
雖然確切的底層機制尚待深入研究(可能涉及 PHP-FPM 在請求執行超時時發送信號中斷 MySQL 連線的處理邏輯),但實際驗證證實:當請求執行時間接近或超過 request_slowlog_timeout 閾值時,慢速日誌的記錄機制可能會干擾長時間運行的資料庫連線。
對於必須長時間運行的批次處理腳本,建議採取以下策略:
ini_set('request_slowlog_timeout', 0) 臨時關閉慢速日誌。若您遇到類似「Lost connection」且無法用常規重連解決的問題,不妨嘗試排查慢速日誌設定。