ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes
ERROR 2006 (HY000): MySQL server has gone away
max_allowed_packet,必須雙邊同步調大。mysql --max_allowed_packet=32M -u root -p
[mysqld]
max_allowed_packet = 64M
重啟生效。
[mysql]
max_allowed_packet = 64M
[mysqldump]
max_allowed_packet = 64M
| 場景 | 建議值 | 備註 |
|---|---|---|
| 一般 Web 應用 | 16M-32M | 預設 4.1+/5.7+ 為 4M/64M |
| 大量 BLOB/TEXT/JSON | 64M-256M | 視最大欄位大小而定 |
| mysqldump 大表匯出 | 256M-512M | 配合 --single-transaction |
| Replication 大事務 | 128M+ | 從庫 slave_max_allowed_packet 同步調整 |
max_allowed_packet 設定 net_buffer_length(預設 16K),避免頻繁重新分配。ulimit -d (data segment limit):ulimit -d 256000 # 250MBmysqld_safe 腳本或 systemd LimitDATA。innodb_log_file_size:單事務最大不超過 innodb_log_file_size * innodb_log_files_in_group / 10。SHOW VARIABLES LIKE 'max_allowed_packet';
# 客戶端
mysql --max_allowed_packet=32M -e "SELECT @@max_allowed_packet;"
max_allowed_packet 是「雙端最小值」生效原則。標準化流程:my.cnf 伺服器端設定 → 客戶端選項檔同步 → 滾動重啟驗證 → 監控大封包頻率,即可徹底消除封包過大錯誤。