phpMyAdmin 导入大SQL文件失败的根源是PHP和Web服务器的限制,而非config.inc.php配置;需修改php.ini中的upload_max_filesize、post_max_size、max_execution_time,并重启服务,Nginx用户还需调大client_max_body_size。
phpMyAdmin 导入大 SQL 文件时提示 Maximum execution time exceeded 或直接空白
本质不是 uploaddir 配置的问题,而是 php 层面的上传和执行限制在卡你。修改 config.inc.php 本身对上传大小 **完全无效**——它只控制 phpmyadmin 的界面行为(比如是否显示“从服务器目录导入”选项),不触碰 php 的 upload_max_filesize、post_max_size 或 max_execution_time。
常见错误是把 $cfg['UploadDir'] = '/var/www/sql'; 当成“放开上传限制”,结果改完照样传不过 2MB。
-
$cfg['UploadDir']只启用“从 Web 服务器本地路径选择文件”的功能,要求路径存在、可读、且被 phpMyAdmin 主机信任(需在$cfg['Servers'][$i]['AllowRoot']等上下文中配合) - 真正影响“能选多大的文件上传”的,是 PHP 的
upload_max_filesize和post_max_size,这两个值必须同时调大,且post_max_size≥upload_max_filesize - 导入大 SQL 还容易超时,
max_execution_time建议设为 0(不限制)或至少 600(10 分钟)
修改 php.ini 后仍没效果?检查是否改错了配置文件
phpMyAdmin 运行在 PHP 上,但 PHP 可能有多个 php.ini:CLI 用一个,Web 服务器(如 Apache/Nginx + PHP-FPM)用另一个。你在终端里 php --ini 看到的路径,和 phpMyAdmin 实际加载的几乎肯定不同。
最可靠的办法是,在 phpMyAdmin 根目录下临时建个 info.php,内容只有一行:<?php phpinfo(); ?>,用浏览器访问它,搜索 “Loaded Configuration File”,那个路径才是真实生效的 php.ini。
- 改完
php.ini必须重启 Web 服务(sudo systemctl restart apache2或sudo systemctl restart php-fpm nginx) - 如果用的是 Docker,别只改宿主机的
php.ini,得进容器里确认或挂载覆盖 - 某些共享主机禁止修改
php.ini,此时只能靠.htaccess(Apache)或user.ini(PHP-FPM)局部覆盖,但upload_max_filesize和post_max_size在部分托管环境被锁定,不可运行时修改
$cfg['UploadDir'] 配置写对了也导入失败?权限和路径是硬门槛
即使 PHP 层上传限制已放宽,启用 $cfg['UploadDir'] 还要过两关:路径必须真实存在且 PHP 进程有读取权限;该路径不能在 phpMyAdmin 的安全白名单外。
典型错误现象是点击“从服务器上传目录”后下拉为空,或选中文件点“执行”后报错 The uploaded file exceeds the upload_max_filesize directive in php.ini(注意:这错误信息其实来自 PHP,不是 phpMyAdmin 自己报的)。
- 路径必须是绝对路径,比如
/var/www/html/phpmyadmin/upload,不能是相对路径或带~ - 确保 Web 服务器用户(如
www-data或nginx)对该目录有r-x权限,文件要有r-- - phpMyAdmin 默认禁用此功能,需显式开启:
$cfg['UploadDir'] = '/path/to/upload';,且不能和$cfg['SaveDir']混用(后者是导出用) - 如果启用了
$cfg['Servers'][$i]['AllowNoPassword'] = false等严格模式,UploadDir可能被静默忽略
比改配置更稳的替代方案:命令行导入大 SQL
当上传路径、PHP 配置、权限全调通仍不稳定时,直接绕过 phpMyAdmin 界面是最省事的做法。尤其对 >50MB 的 SQL 文件,Web 导入本就不靠谱。
前提是能 SSH 登服务器,并确认 MySQL 用户有对应数据库的写权限。
- 用
mysql -u root -p database_name ,比 Web 导入快且无超时风险 - 若 SQL 文件含
CREATE DATABASE,先手动建库,再指定库名导入;否则去掉database_name,让 SQL 自己执行 - 大文件建议加
--default-character-set=utf8mb4避免乱码,也可用pv命令监控进度:pv large.sql | mysql -u root -p database_name - 如果只有 phpMyAdmin 访问权限(无 SSH),那就真得老老实实调 PHP 配置——但务必记住:
config.inc.php不是开关,只是菜单开关,真正的门锁在php.ini里
最容易被忽略的一点:Nginx 用户还得额外检查 client_max_body_size,这个值默认常是 1MB,不改的话,请求根本到不了 PHP 就被 Nginx 拦下了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











