萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 修改 max_allowed_packet 解決「Got a packet bigger than...」與「MySQL server has gone away」

錯誤場景

  • 匯入大 SQL 檔(含巨大 BLOB/TEXT)。
  • 應用寫入長文本/二進位資料。
  • 錯誤訊息:Got a packet bigger than 'max_allowed_packet' bytes 或 MySQL server has gone away(封包過大導致連線斷開)。

預設值

max_allowed_packet = 1M(1MB),對現代應用往往過小。

修改方法

  1. 編輯設定檔:
    Windows:my.ini(安裝目錄或 C:\ProgramData\MySQL\MySQL Server X.Y\)
    Linux:/etc/my.cnf 或 /etc/mysql/my.cnf
  2. 在 [mysqld] 區段新增/修改:
[mysqld]
max_allowed_packet = 64M  # 視業務最大欄位大小調整,建議 16M-256M
  1. 重啟 MySQL 服務生效。

動態調整(無需重啟,僅對新連線生效)

SET GLOBAL max_allowed_packet = 67108864;  -- 64M (單位:位元組)

配合持久化寫入設定檔,確保重啟後生效。

客戶端同步調整

  • mysql 客戶端:mysql --max-allowed-packet=64M ...
  • mysqldump:mysqldump --max-allowed-packet=64M ...
  • 應用程式連線參數(如 JDBC maxAllowedPacket、PHP PDO MYSQL_ATTR_MAX_BUFFER_SIZE)。

注意

  • 過大值會增加記憶體壓力(每連線分配緩衝區),請根據最大業務欄位大小 + 余量設定。
  • 配合 net_buffer_length(初始緩衝)一起調優。
copyright © 萬盛學電腦網 all rights reserved