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

MySQL 導入大 SQL 文件報錯 ERROR 2006 (MySQL server has gone away) 一鍵修復

     編輯:MySQL 綜合教學

故障現場

用 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;

其他可能導致 2006 的原因 (若調大包無效)

  • wait_timeout / interactive_timeout 過小**:導入耗時超過空閒超時。調大:SET GLOBAL wait_timeout = 3600;
  • SQL 語句語法錯誤導致服務端崩潰**:查錯誤日志 .err 文件
  • 服務端 OOM 被殺**:dmesg | grep -i kill,調小 innodb_buffer_pool_size 或加內存
  • 網絡設備閒連接斷開**:防火牆/NAT/LB 空閒超時。客戶端保持長連或調大服務端 wait_timeout
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved