根本原因是PHP的upload_max_filesize和post_max_size限制,需同时调大二者且post_max_size≥upload_max_filesize,再重启Web服务;超大SQL建议用mysql命令行导入。
phpMyAdmin 导入失败显示 “文件超出最大允许大小” 怎么办
根本原因不是 phpmyadmin 本身限制,而是 php 的 upload_max_filesize 和 post_max_size 在拦着。phpmyadmin 只是前端,实际上传由 php 处理,这两个配置值中较小的那个,就是你真正能传上去的上限。
常见错误现象:
– 上传 SQL 文件时页面直接报错或无响应
– phpMyAdmin 界面提示 “文件超过 upload_max_filesize 指令限制”
– 查看 PHP 错误日志出现 PHP Warning: POST Content-Length of XXX bytes exceeds the limit
- 必须同时调大
upload_max_filesize和post_max_size,且post_max_size≥upload_max_filesize,否则上传仍会失败 - 如果启用了
memory_limit(尤其在解析大 SQL 时),也建议同步调高,比如设为512M,否则导入中途可能因内存不足中断 - 修改的是 PHP 配置(
php.ini),不是 phpMyAdmin 的config.inc.php—— 后者改了也没用
怎么找到并修改正确的 php.ini 文件
很多人改错文件:系统可能有多个 php.ini(CLI 版、Apache 版、FPM 版),而 phpMyAdmin 走的是 Web SAPI(通常是 Apache 或 PHP-FPM),必须改对那个。
实操建议:
– 在 phpMyAdmin 根目录下新建一个 info.php,内容为 <?php phpinfo(); ?>,通过浏览器访问它
– 搜索 “Loaded Configuration File”,看到的路径才是当前生效的 php.ini
- 不要凭感觉改
/etc/php/8.1/cli/php.ini—— CLI 配置对网页无效 - 改完必须重启 Web 服务:Apache 用
sudo systemctl restart apache2,PHP-FPM 用sudo systemctl restart php8.1-fpm(版本号按实际调整) - 改完再刷一次
phpinfo()页面,确认三个值(upload_max_filesize、post_max_size、memory_limit)已更新
导入超大 SQL(>200MB)时还卡住?别只盯 upload_max_filesize
即使上传成功,phpMyAdmin 本身也有执行瓶颈:它把整个 SQL 文件读进内存再分段执行,遇到含百万级 INSERT 的单文件,很容易超时或 OOM。
立即学习“PHP免费学习笔记(深入)”;
-
max_execution_time默认 30 秒,大文件解析+执行必然超时,建议设为600或更高 - phpMyAdmin 的
$cfg['ExecTimeLimit'] = 0;(在config.inc.php中)可禁用其内部执行时限,但无法绕过 PHP 的max_execution_time - 真正稳妥的做法是绕过 phpMyAdmin:用命令行
mysql客户端直导,例如mysql -u root -p database_name - 如果只能用 Web 界面,先把大 SQL 拆成
50MB以内小文件(用split -b 50M large.sql part_),再逐个导入
改完配置后导入仍失败?检查 Nginx/Apache 层的上传限制
Web 服务器自己也会拦截大请求,尤其 Nginx 默认 client_max_body_size 是 1MB,比 PHP 还严苛。
- Nginx 用户:检查
nginx.conf或站点配置里的client_max_body_size,需设为至少和post_max_size一致,例如client_max_body_size 512M; - Apache 用户:一般不用额外设,但若启用了
mod_security,需检查其SecRequestBodyLimit是否过小 - 改完 Nginx 配置后必须
sudo nginx -t && sudo systemctl reload nginx,光 reload 不校验配置容易静默失败
最常被忽略的一点:改了 PHP 配置却忘了重启对应的服务进程,或者改了 Nginx 却没 reload —— 这两个动作缺一不可,否则所有配置都是白改。











