导入products表到数据库遇超时、丢数据、改ExecTimeLimit后无限循环求解决
大表导入失败解决方案
方案1:启用phpMyAdmin内置分块导入(无需额外工具)
- 恢复
$cfg['ExecTimeLimit']配置为默认的300,不要设置为0,phpMyAdmin导入逻辑存在缺陷,无限制执行时间下遇到IO阻塞会直接进入无限死循环 - 进入phpMyAdmin导入页面,选择目标导入文件后,找到部分导入配置项
- 勾选「允许中断导入」,将「每页导入字节数」调整为默认值的1/2~1/4(比如默认2MB可改为512KB)
- 提交导入即可,系统会自动拆分任务分批执行,避免单次执行超时,也不会出现数据重复/缺失问题
方案2:手动拆分SQL文件分批导入
如果分块导入依旧失败,可以手动拆分导入文件规避超时:
- 用文本编辑器打开products表对应的SQL文件,按每1000~2000条INSERT语句为一个批次拆分,保存为多个独立的小SQL文件
- 按顺序依次导入这些小文件,每次导入完成核对行数无误后再导入下一批次即可
方案3:命令行直接导入(优先推荐,无超时问题)
大表导入完全不建议依赖phpMyAdmin的Web端导入功能,直接用MySQL命令行导入可以100%规避PHP执行时间限制问题:
- 将SQL文件上传到数据库所在服务器的可访问目录,例如
/data/import/products.sql - 执行导入命令:
mysql -u 数据库用户名 -p 目标数据库名称 < /data/import/products.sql - 输入数据库密码后等待执行完成即可,只要SQL文件本身语法正确,不会出现缺数、循环、超时等问题,导入速度也比Web端快数倍。
额外注意
- 导入前建议先备份现有products表数据,避免导入冲突导致数据损坏
- 如果是CSV格式的导入源,可以使用MySQL的
LOAD DATA INFILE语法,导入速度比执行INSERT语句快3~10倍。
内容的提问来源于stack exchange,提问作者Siddharthsonii
相关产品推荐
相关产品推荐

