專案中遇到 Error 2006: MySQL server has gone away,初以為是連線逾時,排查後發現根因是單次 SQL 封包超過 max_allowed_packet 預設 1MB 限制。本文記錄完整排查與解決流程,作為同類問題的快速參考。
INSERT / UPDATE 執行到一半中斷MySQL server has gone away 易誤判為連線斷開SHOW VARIABLES LIKE 'max_allowed_packet';
-- 回傳 1048576 (1MB),遠小於業務所需
# /etc/my.cnf 或 my.ini
[mysqld]
max_allowed_packet = 64M
重啟服務:systemctl restart mysqld
SET GLOBAL max_allowed_packet = 209715200; -- 200MB
-- 重新連線後生效
MySQL 官方文檔指出:mysqldump 導出檔案會自動包含 SET @@session.max_allowed_packet=... 語句,確保導入時不受限制。若手動導入大 SQL 檔失敗,請檢查客戶端參數:
mysql --max_allowed_packet=64M -u root -p db_name < dump.sql
官方文檔:MySQL max_allowed_packet 詳細說明
Aborted_clients 狀態變數,異常增長常為封包過大信號遇到 gone away 勿慌,優先檢查封包大小,九成以上屬於此類配置問題,調大參數並分批處理即可徹底解決。