phpMyAdmin不支持导入.sql.gz文件,因其导入流程依赖PHP的$_FILES机制且不处理gzip解压,任何PHP版本均无法识别.gz文件;唯一可靠方式是命令行执行gunzip < backup.sql.gz | mysql -u user -p db_name。
phpMyAdmin 导出的 .sql.gz 文件根本就不能被 phpMyAdmin 导入——不是“在 PHP 8.0 下无法导入”,而是**任何 PHP 版本下都不支持**。它压根不处理 gzip 解压逻辑,上传阶段就失败。
phpMyAdmin 界面根本不识别 .gz 文件
你点“选择文件”时看不到 .sql.gz,或者选中后上传按钮灰掉、进度条卡死、跳转到空白页——这不是 php 8.0 的 bug,是功能缺失。原因很直接:phpmyadmin 的导入流程完全依赖 php 的 $_files 机制和 move_uploaded_file(),它只接收原始 http post 上传的二进制流,不做任何解压。浏览器传过来的是 gzip 压缩流,php 就当它是乱码 sql,后续解析直接崩。
为什么改 php.ini 也救不了 .gz 上传
即使你把 upload_max_filesize、post_max_size 调到 2G,phpMyAdmin 依然拒绝 .sql.gz:
-
upload_max_filesize限制的是上传文件体积,但phpMyAdmin在 MIME 类型校验阶段就过滤掉了application/gzip或application/x-gzip - 就算绕过 MIME 检查(比如手动改后缀为
.sql),PHP 接收到的仍是压缩字节流,mysql客户端执行时会报MySQL server has gone away或解析错误 - PHP 8.0 对
$_FILES的类型校验更严格,反而让这类“伪绕过”更容易失败
真正能用的导入方式只有两种
别折腾界面了,直接上命令行(Linux/macOS/WSL):
- 确保服务器上已安装
gunzip和mysql客户端 - 把
backup.sql.gz传到服务器(scp、rsync或 FTP) - 执行:
gunzip - 如果数据库有密码,
-p会交互提示;也可用-p'yourpass'(注意无空格),但不推荐明文写密码
这个命令不走 PHP 上传流程,不受 upload_max_filesize、memory_limit 或 max_execution_time 限制,解压+导入全程流式处理,快且稳。
想在 phpMyAdmin 里“假装”支持 .gz?不行,但可以换招
有人试过前端 JS 解压再提交——浏览器根本读不到原始 gzip header,大文件直接 OOM 卡死;也有人想改 phpMyAdmin 源码加 gzdecode()——PHP 8.0 已废弃 gzopen() 的部分用法,且要重写整个导入器,维护成本远超收益。
立即学习“PHP免费学习笔记(深入)”;
唯一现实的“界面替代方案”是启用 $cfg['UploadDir'] = 'upload';:把 .sql.gz 先用 FTP 传到服务器 phpMyAdmin/upload/ 目录,再在 phpMyAdmin 导入页选择“从服务器上传目录导入”,但它仍只认 .sql,所以你得先在服务器上手动 gunzip *.sql.gz ——这一步绕不开,只是把解压动作从本地挪到了服务端。



















