在使用 MySQL 綠色版(免安裝版)的過程中,經常遇到客戶端連接後出現 MySQL Server has gone away 錯誤。這通常發生在連接閒置超過預設逾時時間,或是執行大型 SQL 語句時。
修改 MySQL 設定檔 my.ini(Windows)或 my.cnf(Linux):
# 原設定
wait_timeout=10
# 修改為較大值(單位:秒,此處為 800 小時)
wait_timeout=2880000
interactive_timeout=2880000
儲存後無需重啟服務即可生效(視版本而定,建議重啟以確保生效)。
wait_timeout(預設 8 小時)。wait_timeout 與 interactive_timeoutmysql_ping() 保持連線活躍testOnBorrow)INSERT、含 BLOB/TEXT 欄位,或單次查詢超過 max_allowed_packet(預設 1MB/4MB/16MB,視版本)。max_allowed_packet(伺服器端與客戶端皆需設定):
[mysqld]
max_allowed_packet = 64M # 依需求調整
!$conn 判斷是否重連,但連接物件可能仍存在卻已被伺服器斷開。mysql_ping() 驗證連線有效性:
if (!$conn) {
$conn = mysql_connect(...);
} elseif (!mysql_ping($conn)) {
mysql_close($conn);
$conn = mysql_connect(...);
}
mysql_query($sql, $conn);
KILL 指令)MYSQL_OPT_READ_TIMEOUT)fork() 子程序共用同一連接Aborted_clients、Aborted_connects 狀態變數MYSQL_OPT_RECONNECT)INSERT,避免單次封包過大