執行 mysql < dump.sql 或應用程式批量寫入時,拋出:
ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes
max_allowed_packet 限制(預設 4MB/64MB 視版本)。old_passwords=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。
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';
導入時同步指定大封包參數,防止客戶端預設值過小:
mysql --max_allowed_packet=512M -u root -p db_name < dump.sql
max_allowed_packet=64M,5.6 為 4MB,升級版本可減少配置麻煩。SHOW GLOBAL STATUS LIKE 'Max_used_connections'; 監控連線峰值。雙管齊下(Server 端 + 客戶端),徹底解決大資料導入阻礙。