post_max_size 和 upload_max_filesize 必须同步修改,否则上传失败;二者是php上传的“双闸门”,前者限制整个post请求体大小,后者仅限单个文件;实际操作需同时设为512m并重启apache。

post_max_size 和 upload_max_filesize 必须同步改
只改 post_max_size 不改 upload_max_filesize,或者反过来,都会失败。PHP 上传流程中,这两个值是“双闸门”:前者控制整个 POST 请求体大小(含表单字段、文件数据等),后者只管单个上传文件上限。哪怕你只传一个 SQL 文件,post_max_size 也必须 ≥ upload_max_filesize,否则请求在解析阶段就被截断,报错就是 File exceeds the maximum allowed size。
实操建议:
- 打开 XAMPP 安装目录下的
php\php.ini(不是php.ini-development或php.ini-production) - 搜索并修改两行,设为相同值更稳妥:
upload_max_filesize = 512M,post_max_size = 512M - 改完必须重启 Apache——仅重启 MySQL 或 phpMyAdmin 页面刷新无效
导入大 SQL 文件时还卡住?别只盯着上传限制
调高 post_max_size 后仍失败,常见于几百万行的 SQL 文件。这时真正拦路的是执行超时和内存不足,不是上传本身。
继续在同一个 php.ini 中调整:
-
max_execution_time = 600(默认 30 秒,10 分钟覆盖绝大多数导入场景) -
memory_limit = 512M(低于 256M 容易在解析 CREATE TABLE + INSERT 混合语句时 OOM) -
max_input_time = 600(防止 PHP 在读取 POST 数据阶段就中断)
改完仍白屏或 500 错误,大概率是 phpMyAdmin 自身瓶颈——它把整个 SQL 加载进内存再逐行执行,不适用于 >50MB 的文件。
绕过 phpMyAdmin:用 mysql 命令行直接导入
这才是处理百 MB 级 SQL 文件的可靠路径。它不经过 PHP 上传机制,完全跳过 post_max_size 等所有限制。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
操作步骤:
- 打开终端(Windows 可用 XAMPP 控制面板里的 Shell)
cd \xampp\mysql\bin- 执行:
mysql -u root -p --default-character-set=utf8mb4 database_name - 输入密码(若设了密码;默认为空,直接回车)
- 然后用
source /full/path/to/your/file.sql导入(注意路径用正斜杠或双反斜杠)
关键点:--default-character-set=utf8mb4 必须带上,否则中文可能变问号;source 命令里的路径不能是相对路径,也不能含中文或空格。
导出大数据库也报 504?同样是 post_max_size 在作怪
很多人以为导出不上传文件就不用调 post_max_size,其实 phpMyAdmin 的“导出”页面提交的是一个巨量 POST 请求:勾选几十张表、设置格式、压缩方式、添加注释……这些选项拼起来可能远超默认的 8M。
解决方法一样:在 php.ini 中把 post_max_size 和 upload_max_filesize 都提到 64M 或更高,再重启 Apache。
真正容易被忽略的是:即使参数全调高,如果目标 SQL 文件里有大量 BLOB 字段或未压缩的 INSERT 语句,phpMyAdmin 仍可能因内存耗尽而崩溃——这种情况下,命令行 mysqldump 才是唯一靠谱选择。










