You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL导入.sql文件出现server gone away错误后如何继续未完成的导入

MySQL 8.0 超大SQL文件断点续导解决方案

前置操作:避免再次触发ERROR 2006: Server has gone away

登录MySQL shell后先执行以下临时参数配置,仅当前会话生效,不会修改原有配置:

SET GLOBAL max_allowed_packet = 1G;
SET GLOBAL wait_timeout = 288000;
SET GLOBAL interactive_timeout = 288000;
SET autocommit = 0;
SET unique_checks = 0;
SET foreign_key_checks = 0;

第一步:定位中断位置

  • 执行SHOW TABLES;确认已经完全导入完成的表
  • 对导入到一半的表执行SELECT COUNT(*) FROM 目标表名;,记录已插入的行数

第二步:无需打开大文件,直接跳过已执行内容

使用系统自带命令行工具处理16G大文件,无需用文本编辑器加载:

1. 查找半导入表的INSERT语句起始行号

  • Linux/macOS 终端执行:
    grep -n "INSERT INTO \`你的半导入表名\`" /path/to/你的文件.sql
    
    输出的第一个数字就是该表INSERT语句的起始行号,记为X
  • Windows PowerShell执行:
    Select-String -Path "C:\path\to\你的文件.sql" -Pattern "INSERT INTO \`你的半导入表名\`" | Select-Object -First 1 LineNumber
    
    输出的LineNumber值记为X

2. 跳过已完成内容直接导入剩余部分

自动替换INSERT为INSERT_IGNORE避免重复数据报错,无需修改原文件:

  • Linux/macOS 终端执行:
    sed 's/^INSERT INTO/INSERT IGNORE INTO/g' /path/to/你的文件.sql | tail -n +X | mysql -u 你的用户名 -p 目标数据库名
    
  • Windows PowerShell执行:
    (Get-Content "C:\path\to\你的文件.sql" | Select-Object -Skip (X-1)) -replace '^INSERT INTO', 'INSERT IGNORE INTO' | mysql -u 你的用户名 -p 目标数据库名
    

后续收尾

导入完成后在MySQL shell执行以下命令提交事务并恢复默认约束检查:

COMMIT;
SET unique_checks = 1;
SET foreign_key_checks = 1;

后续导入优化建议

  • 超大文件不要用source命令导入,直接用命令行管道导入速度提升3-5倍,稳定性更高
  • 下次导入前先执行tee /path/to/导入日志.log,所有执行记录都会写入日志,中断后直接查日志最后执行的行号即可快速定位断点

内容的提问来源于stack exchange,提问作者lyra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:42:01