phpMyAdmin 6.0 不支持直接导入 .sql.gpg 文件,必须先在服务器端用 gpg 解密为纯文本 SQL,再通过命令行导入 MySQL;Linux/macOS 使用管道流式解密导入,Windows 需借助 Gpg4win 和 PowerShell 分步操作,并注意字符集、排序规则及 MySQL 版本兼容性问题。
phpMyAdmin 6.0 不支持直接导入 .sql.gpg 文件
它压根不识别 gpg 加密格式,上传后必然报错:file is empty or not readable 或 invalid or empty sql statement。这不是配置问题,是功能缺失——phpmyadmin 只处理纯文本 sql,解密必须由你提前完成。
Linux/macOS 服务器上:用 gpg 解密 + mysql 导入两步走
这是唯一可靠路径,中间不落地文件最安全:
- 确保目标库已存在:
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" - 解密并导入(单管道防泄露):
gpg --decrypt backup.sql.gpg | mysql -u dbuser -p db_name - 若私钥带密码,终端会停住等你输入;绝不能把密码写进脚本或命令行
- 失败时先跑
gpg --list-secret-keys确认私钥已导入,再用gpg --verify backup.sql.gpg检查签名是否损坏
Windows 上用 Gpg4win + PowerShell 要绕开管道陷阱
PowerShell 默认不把 | 正确传给 mysql.exe,强行用会卡住或报错:
- 装 Gpg4win 完整版(含 Kleopatra 和 GpgEX),然后运行
Get-Command gpg确认可用;不行就手动加路径:$env:PATH += ";C:\Program Files (x86)\GnuPG\bin" - 改用两步法:
gpg --output backup.sql --decrypt backup.sql.gpg,再mysql -u dbuser -p db_name < backup.sql - 执行完立刻清理:
Remove-Item backup.sql,避免明文 SQL 残留在磁盘
导入前必须检查的三个兼容性雷区
即使解密成功,MySQL 版本差异仍会导致失败:
-
Unknown collation: 'utf8mb4_0900_ai_ci'?这是 MySQL 8.0+ 备份往 5.7 导的典型错误,全局替换为utf8mb4_unicode_ci,连CREATE DATABASE里的DEFAULT COLLATE也要改 - 遇到
ERROR 1064卡在JSON_OBJECT()或GENERATED ALWAYS AS?删掉STORED/VIRTUAL关键字,把JSON_OBJECT('k','v')临时替换成'{"k": "v"}' - 大文件(>2MB)别硬塞 phpMyAdmin——它受限于 PHP 的
upload_max_filesize、max_execution_time和前端解析器,直接走命令行:mysql -u root -p --default-character-set=utf8mb4 db_name < backup.sql
SET NAMES utf8mb4,中文仍可能乱码;而私钥一旦放进 Web 可访问目录,等于把数据库钥匙挂在门口。



















