phpMyAdmin 上传限制由 PHP 的 upload_max_filesize 和 post_max_size 决定,而非其自身配置;超 50MB 应改用 mysql 命令行导入,并确保 max_allowed_packet、SQL 文件格式及编码正确。
phpmyadmin 本身不设上传上限,真正卡住你的是 php 的 upload_max_filesize 和 post_max_size —— 改这两个值能解 90% 的“文件太大”问题,但超过 50mb 就该直接切命令行。
为什么改了 phpMyAdmin 配置没用?
很多人去改 config.inc.php 里的 $cfg['MaxImportFileSize'] 或 $cfg['UploadDir'],结果还是失败。这不是配置没生效,而是根本没打中要害:$cfg['MaxImportFileSize'] 只是前端提示值,PHP 层早就在上传阶段把请求拦下了;$cfg['UploadDir'] 虽然能绕过浏览器上传,但前提是文件已放在服务器上,且仍受 upload_max_filesize = 0(即不限制)时才完全放开——否则解析 SQL 内容时照样可能因内存或超时中断。
- 必须同时调大
upload_max_filesize和post_max_size,且后者 ≥ 前者 -
memory_limit和max_execution_time也要同步提高,否则上传成功后执行阶段仍会报错或空白 - 改完一定要重启 PHP 服务(不是重载),并用
phpinfo()页面确认“Loaded Configuration File”路径下的值已更新
如何在宝塔面板快速调高 PHP 上传限制
进宝塔 → 网站 → 对应 PHP 版本 → 配置修改,在打开的 php.ini 文件里定位并修改这四行:
upload_max_filesize = 256M post_max_size = 256M memory_limit = 512M max_execution_time = 600
保存后点击「重启」PHP 服务。别信“重载”,它不生效。改完立刻建个 phpinfo.php 验证,确保页面里显示的值和你写的完全一致。
- 如果看不到
phpinfo()输出,说明被禁用——此时只能靠宝塔「PHP 设置」页的「配置修改」入口,它会自动写入正确位置 - 宝塔默认对 CLI 版 PHP 和 Web 版 PHP 分开管理,别去改
/www/server/php/8.5/bin/php.ini,那是命令行用的,对 phpMyAdmin 无效
导入超大 SQL(>50MB)必须用 mysql 命令行
哪怕你把 PHP 所有参数拉到 1G,phpMyAdmin 依然大概率在解析 INSERT 大块数据时卡死、超时或 OOM。命令行是唯一可控、可追踪、不经过 Web 中间层的方案。
立即学习“PHP免费学习笔记(深入)”;
- 先确认 SQL 文件已在服务器上(比如
/www/backup/large.sql),且数据库已创建好、字符集为utf8mb4 - 执行带关键参数的导入命令:
mysql -u root -p --default-character-set=utf8mb4 --max-allowed-packet=1073741824 -f your_db_name < /www/backup/large.sql - 如果 SSH 断连,用
nohup包裹:nohup mysql -u root -p --max-allowed-packet=1G -f your_db_name < /www/backup/large.sql > import.log 2>&1 &,再用tail -f import.log看进度 - 导入后别只看命令返回“成功”:进 MySQL 执行
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'your_db_name';核对表数,再查几个核心表的COUNT(*)
容易被忽略的三个硬性前提
命令行导入失败,90% 不是语法或权限问题,而是这三个点没检查:
-
max_allowed_packet必须在 MySQL 配置里设够(如my.cnf的[mysqld]段加max_allowed_packet = 1G),否则单条超长 INSERT 直接被截断,日志里只报 “Got a packet bigger than ‘max_allowed_packet’ bytes” - SQL 文件不能含
CREATE DATABASE或USE语句,否则可能覆盖错库或报错退出;用grep -n "CREATE DATABASE\|USE" large.sql快速扫一遍 - 文件编码必须是 UTF-8 无 BOM,BOM 会导致第一行乱码、
SET NAMES失效,后续中文全变问号——用file -i large.sql查编码,用sed -i '1s/^\xEF\xBB\xBF//' large.sql去 BOM



















