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

MySQL 匯入 SQL 檔報錯 2013/2006/2006 解決:拆分巨大 INSERT 語句

     編輯:MySQL 資料庫相關知識

匯入大型 SQL 檔時出現:

ERROR 2013 (HY000): Lost connection to MySQL server during query
ERROR 2006 (HY000): MySQL server has gone away
ERROR 2002 (HY000): Can't connect to local MySQL server through socket ... (111)

經排查為單條 INSERT 包含過多 VALUES 列(mysqldump 預設 --extended-insert),導致封包超過 max_allowed_packet 或執行時間過長觸發斷線。

解決方法:匯出時禁用 extended-insert

mysqldump -u root -p --skip-extended-insert db_name > db_name.sql
  • 每行資料產生獨立 INSERT 語句,檔案體積略增但極度穩定。
  • 適用於 MySQL 5.1+,特別是 5.1.73 等較舊版本。

替代方案(不改匯出)

  1. 增大封包限制:SET GLOBAL max_allowed_packet = 1073741824; (1GB) 並在 my.cnf 永久生效。
  2. 調大超時:SET GLOBAL net_read_timeout = 600; SET GLOBAL net_write_timeout = 600;。
  3. 分檔匯入:用 split 或編輯器將大 SQL 切分為多個小檔依序 SOURCE。
  4. 使用管道流式匯入:gunzip < dump.sql.gz | mysql -u root -p db_name 避免客戶端緩衝整個檔案。

驗證版本

mysql --version
# mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64)

若頻繁遷移大庫,建議改用 mydumper/myloader 多執行緒並行匯出入,效能提升 5-10 倍。

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