必须分批导出而非硬扛,因phpMyAdmin默认全表SELECT拼SQL,10万行以上易触发超时或内存溢出;需用自定义模式+主键范围WHERE条件接力切割,配合序号命名与末尾完整性校验。
导出大表时页面卡死或超时,必须分批而不是硬扛
phpmyadmin 默认会把整张表 select 出来再拼 sql,10 万行以上就容易触发 max_execution_time 或内存溢出。看到空白页、504 或进度条不动,不是网络问题,是 php 进程被系统 kill 了。分批导出不是“可选技巧”,而是唯一能落地的方式。
用「自定义导出 + 行数限制」手动切片
「快速导出」完全不可控,必须切到「自定义」模式。关键操作在「数据」区域:
- 勾选
SELECT data(否则只导结构) - 在
Limit number of rows输入框填具体数字,比如50000(别用默认的0) - 勾选
Add AUTO_INCREMENT value和Disable foreign key checks,避免后续导入报错 - 「格式特定选项」里取消所有压缩(
gzipped/zipped),压缩需内存拼全文,大表直接 OOM
如何确保不漏行、不错位?靠 WHERE 条件接力
单纯靠 Limit 只能导前 N 行,第二批次得从第 N+1 行开始。最稳的方式是用主键或自增 ID 做范围切割:
- 先查最大 ID:
SELECT MIN(id), MAX(id) FROM your_table; - 第一次导出:
WHERE id BETWEEN 1 AND 50000 - 第二次导出:
WHERE id BETWEEN 50001 AND 100000 - 在「自定义导出」页底部「SQL 查询」框里粘贴完整
SELECT ... WHERE ...,再点执行
注意:WHERE 条件必须写进「SQL 查询」框,不能只依赖 Limit —— 否则每次都是从头扫表,重复导出且性能更差。
导出文件命名和验证不能省
分批导出后,文件名必须带序号和范围,例如 table_users_1_50000.sql、table_users_50001_100000.sql。否则第二天你根本分不清哪份是哪段。
- 每份导出完立刻用文本编辑器打开末尾几行,确认最后一条 INSERT 是完整的(有分号、没截断)
- 检查最后一行是否含
COMMIT;或UNLOCK TABLES;,没有说明导出中途被中断 - 导入前先用
head -n 20 xxx.sql看开头是否有CREATE TABLE,避免误把中间片段当全量
真正麻烦的不是分多少次,而是某一次漏了 WHERE 条件、或某份文件末尾少了个分号——这种错误导入时不会报错,但数据就静默丢了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











