“Partial Import”无法真正续传,因其仅跳过错误语句(如设continue_on_error=1),不记录执行位置、不保存事务状态;中断后须手动切分文件、定位断点、分段导入,或直接使用命令行mysql -u user -p database_name直导。
phpmyadmin 的 “partial import” 不是断点续传功能,它只是跳过出错语句继续执行——导入中断后不能自动从断点恢复,必须手动干预。
为什么 “Partial Import” 无法真正续传?
“Partial Import” 的本质是设置 SET FOREIGN_KEY_CHECKS=0 和 continue_on_error=1(底层对应 MySQL 的 --force 行为),遇到语法错误、主键冲突、字段超长等就跳过当前语句,继续下一条。它不记录已执行到哪一行,也不保存事务状态。
常见误判场景:
- 导入中途被浏览器关闭或网络中断 → 文件根本没传完,
Partial Import压根没机会运行 - 大文件因
max_execution_time超时中断 → PHP 进程终止,后续语句完全不执行 - 遇到
INSERT INTO ... VALUES (...),(...),(...)批量插入失败 → 整条语句被跳过,无法知道其中前几行是否已写入
实际能用的中断后恢复操作
真正可行的做法是:把原始 SQL 文件切片 + 标记进度 + 分段导入。关键靠外部工具和人工定位,不是靠 phpMyAdmin 界面按钮。
- 用
split -l 5000 bigfile.sql chunk_把文件按行切分(5000 行/段是经验值,避免单段超upload_max_filesize) - 导入前在每段开头加注释标记,例如
-- CHUNK: 001 START,成功后手动记下最后执行的标记 - 导入失败时,用文本编辑器打开原文件,搜索最后成功的
INSERT或CREATE TABLE语句,从下一行开始另存为新文件再导入 - 对含自增主键的表,导入前先查
SELECT MAX(id) FROM table_name,新文件中去掉已存在的 ID 对应的INSERT行,或改用INSERT IGNORE替代
比 “Partial Import” 更可靠的替代方案
phpMyAdmin 界面导入本身就不适合 >2MB 的文件。更稳的方式是绕过它:
立即学习“PHP免费学习笔记(深入)”;
- 用命令行
mysql客户端直连:mysql -u user -p database_name ,支持断开重连(配合 <code>screen或nohup) - 用
mysqlimport导入 CSV,比 SQL 解析快一个数量级,且支持--ignore跳过重复行 - 如果必须用 phpMyAdmin,启用
$cfg['UploadDir']配置,把文件先上传到服务器指定目录,再从 “从 Web 服务器上传目录导入” —— 避免 HTTP 上传中断问题 - 大库迁移时,用
mysqldump --single-transaction --skip-triggers重新导出,比修复中断导入更省时间
最常被忽略的一点:phpMyAdmin 的 “Partial Import” 开关只影响语法/约束错误的处理策略,对连接超时、内存溢出、磁盘满这类系统级失败完全无感——这些情况发生后,数据库状态可能已不一致,必须先 SHOW PROCESSLIST 和 SELECT COUNT(*) 校验,而不是急着点重试。



















