用 SOURCE 或 mysql < dump.sql 導入大 SQL 文件時,報錯:
ERROR 2006 (HY000): MySQL server has gone away
-- 或
ERROR 2013 (HY000): Lost connection to MySQL server during query
max_allowed_packet 限制默認值僅 4MB (舊版本) 或 64MB (新版本)。大批量 INSERT、巨大 BLOB/TEXT、超長 SQL 語句會觸發。
SET GLOBAL max_allowed_packet = 67108864; -- 64MB (64 * 1024 * 1024)
-- 或更大,如 256MB
SET GLOBAL max_allowed_packet = 268435456;
驗證**:
SHOW VARIABLES LIKE 'max_allowed_packet';
-- Value: 67108864
# /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
max_allowed_packet = 256M # 建議 256M 起步,現代硬件無壓力
修改後 systemctl restart mysql 生效。
導入命令同步指定:
mysql --max_allowed_packet=256M -u root -p dbname < dump.sql
# 或
mysqldump --max_allowed_packet=256M ...
# 服務端
SET GLOBAL max_allowed_packet = 268435456;
SET GLOBAL net_buffer_length = 1000000; -- 通訊緩存也調大
# 客戶端導入 (關閉自動提交、禁用檢查、指定大包)
mysql --max_allowed_packet=256M --net-buffer-length=1M -u root -p \
--init-command="SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;" \
dbname < dump.sql
# 導入後記得恢復 (或直接重啟會話)
# SET autocommit=1; SET unique_checks=1; SET foreign_key_checks=1;
SET GLOBAL wait_timeout = 3600;.err 文件dmesg | grep -i kill,調小 innodb_buffer_pool_size 或加內存wait_timeout