首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL「Packet for query is too large」錯誤解決:max_allowed_packet 參數調優指南

     編輯:MySQL 綜合教學

錯誤現象

ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes

典型場景:批量 INSERT 超大 SQL、導入含大字段(BLOB/TEXT/JSON)數據、存儲過程構建超長動態 SQL。

參數作用

max_allowed_packet 限制 **單次客戶端-服務器通信包的最大體積**,雙向生效:

  • 客戶端發送 SQL 超限 → 報錯。
  • 服務器返回結果集超限 → 截斷/報錯。

修改方法

1. 永久生效(配置文件)

# my.cnf / my.ini
[mysqld]
max_allowed_packet=256M  # 視業務調整,建議 64M-1G

[client]
max_allowed_packet=256M  # 客戶端也需同步調大,否則 mysqldump 等工具仍受限

重啟服務生效。

2. 運行時動態調整(無需重啟,僅對新連接生效)

客戶端工具同步調整

工具參數示例
mysql 命令列--max-allowed-packetmysql --max-allowed-packet=256M -u root -p
mysqldump--max-allowed-packetmysqldump --max-allowed-packet=256M db > dump.sql
MySQL WorkbenchPreferences → SQL Editor → Max Packet Size設置 256M
JDBC連接屬性maxAllowedPacket=268435456 (Connector/J 8.0+)

調優建議與上限

  • 默認值:4MB (5.6) / 64MB (8.0)。
  • 最大值:1GB (1073741824 字節)。
  • 建議:常規業務 64M-256M,大字段業務 512M-1G。
  • 過大風險:單條惡意/錯誤 SQL 佔用過多內存,導致 OOM。

排查清單

  1. 確認 SHOW VARIABLES LIKE 'max_allowed_packet' 已生效。
  2. 確認客戶端工具/驅動同步調大。
  3. 檢查 SQL 是否異常膨脹(如未分批的萬行 INSERT),優先優化 SQL 結構。
  4. 檢查 net_buffer_length(默認 16KB,通常無需調整)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved