ERROR 2006 (HY000) at line 12345: MySQL server has gone away
導入大 SQL 文件(含大 INSERT/Blob)時,連接中斷,實際是 Server 端主動關閉超大包連接。
max_allowed_packet 默認 1MB (1048576),客戶端發送的數據包超過此限制,Server 切斷連接。
mysql> SHOW VARIABLES LIKE 'max_allowed_packet'; +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+---------+
[root@server ~]# vi /etc/my.cnf [mysqld] max_allowed_packet = 32M # 視最大 SQL 文件/Blob 大小調整,建議 32M~256M # 重啟生效 [root@server ~]# service mysqld restart
-- 全局臨時(重啟失效) mysql> SET GLOBAL max_allowed_packet = 33554432; -- 32M -- 會話級(僅當前連接) mysql> SET SESSION max_allowed_packet = 33554432;
mysql> SHOW VARIABLES LIKE 'max_allowed_packet'; +--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 33554432 | +--------------------+----------+
再次導入大文件,錯誤消失。
max_allowed_packet 同時限制客戶端發送與Server 發送的最大包體,雙端需一致(客戶端庫如 mysqlnd、JDBC 驅動也有對應設置)。net_buffer_length(初始緩存,默認 16K)使用,大包會自動擴展至 max_allowed_packet。