首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 導入數據報錯「Got a packet bigger than max_allowed_packet」完整解決方案

     編輯:MySQL 資料庫相關知識

錯誤現象

執行 mysql < dump.sql 或應用程式批量寫入時,拋出:

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

核心成因

  1. 單條 SQL/資料行過大:超過 Server 端 max_allowed_packet 限制(預設 4MB/64MB 視版本)。
  2. 舊版密碼插件干擾:部分 RPM 安裝的 MySQL 預設開啟 old_passwords=1,導致認證協議不匹配,間接引發封包解析異常。

解決步驟

1. 調大 max_allowed_packet(核心方案)

編輯 my.cnf(Linux)或 my.ini(Windows)的 [mysqld] 區段:

[mysqld]
max_allowed_packet = 512M  # 建議 256M~1G,視最大 BLOB/TEXT 大小而定

重啟 MySQL 服務生效:systemctl restart mysqld 或 net stop mysql && net start mysql。

2. 關閉 old_passwords(針對 RPM/舊版安裝)

檢查現狀:

SHOW VARIABLES LIKE 'old_passwords';

若為 ON,在 [mysqld] 區段設定:

old_passwords = 0

重啟後,需重新設定使用者密碼(新加密方式):

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';

3. 客戶端同步調整

導入時同步指定大封包參數,防止客戶端預設值過小:

mysql --max_allowed_packet=512M -u root -p db_name < dump.sql

驗證與建議

  • 導入完成後可將參數調回較小值(如 64M)以節省記憶體。
  • MySQL 5.7+ 預設 max_allowed_packet=64M,5.6 為 4MB,升級版本可減少配置麻煩。
  • 定期檢查 SHOW GLOBAL STATUS LIKE 'Max_used_connections'; 監控連線峰值。

雙管齊下(Server 端 + 客戶端),徹底解決大資料導入阻礙。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved