升级phpMyAdmin 4.9至5.2需分步验证PHP≥7.4及mbstring、openssl、mysqli、json、gd扩展;必须使用all-languages包,复制config.sample.inc.php并配置blowfish_secret、禁用hide_db、设auth_type=cookie;MySQL 8.0+用户需切回mysql_native_password插件;还需启用$cfg['SessionForceNew'] = true并确保session_regenerate_id(true)在登录后执行。

直接升级 phpMyAdmin 4.9 → 5.2 不是“替换文件就完事”,稍有疏漏就会白屏、登录失败、MySQL 8.0 用户不可见,甚至暴露会话 ID。必须分步验证依赖、迁移配置、堵住会话固定漏洞,缺一不可。
确认 PHP 版本与扩展是否真达标
phpMyAdmin 5.2 要求 PHP ≥ 7.4,且以下扩展必须启用并能被识别: mbstring、openssl、mysqli、json、gd。缺任一个,页面顶部或空白,或报错如 call to undefined function mb_strlen()。
- 别只看
php -v,要运行php -m | grep -E 'mbstring|mysqli|openssl'确认加载 - 宝塔/PHPStudy 用户注意:
unzip命令常未安装,改用tar -xzf解压,避免解包失败 - 若 PHP 是 7.2 或更低,先升级 PHP,否则升级 phpMyAdmin 只会放大问题
必须用 all-languages 包 + 手动初始化 config.inc.php
官网提供 phpMyAdmin-X.X.X-english.tar.gz 和 phpMyAdmin-X.X.X-all-languages.tar.gz 两种包。选错会导致中文界面乱码、按钮不显示、JS 加载失败——这不是 bug,是语言包缺失。
- 下载后执行:
tar -xzf phpMyAdmin-5.2.1-all-languages.tar.gz && mv phpMyAdmin-5.2.1-all-languages phpmyadmin - 删掉旧的
config.inc.php(避免残留冲突),再从模板复制:cp phpmyadmin/config.sample.inc.php phpmyadmin/config.inc.php - 必须设置
$cfg['blowfish_secret']:用openssl rand -base64 32生成字符串填入,留空会导致登录页 JS 加密失败,提交后跳回空页 - 检查并删除或注释掉
$cfg['Servers'][$i]['hide_db'] = 'mysql';这行,否则 MySQL 8.0+ 的mysql数据库不可见,用户管理功能彻底失效
MySQL 8.0+ 用户登录后看不到 user 表?不是权限问题,是认证插件不兼容
能登录但点不开 mysql 库下的 user 表,错误提示可能是 #1142 - SELECT command denied,实际原因是 MySQL 8.0 默认使用 caching_sha2_password 插件,而 phpMyAdmin 5.2 默认只支持 mysql_native_password。
立即学习“PHP免费学习笔记(深入)”;
- 登录 MySQL 终端执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 或为 phpMyAdmin 单独建一个兼容用户:
CREATE USER 'pma'@'localhost' IDENTIFIED WITH mysql_native_password BY 'strong_pass'; GRANT ALL ON *.* TO 'pma'@'localhost'; FLUSH PRIVILEGES; - 对应修改
config.inc.php中$cfg['Servers'][$i]['user']和$cfg['Servers'][$i]['password']
PHP 8.2 下 E_DEPRECATED 警告破坏登录流程,不能靠关 display_errors 解决
phpMyAdmin 5.2.1+ 声明支持 PHP 8.2,但内部仍调用如 mb_regex_encoding() 等已弃用函数。这些是 E_DEPRECATED 级警告,不会让脚本崩溃,但会输出到响应体开头,导致 HTML 结构损坏、AJAX 失败、登录后跳转中断。
- 不能全局改
error_reporting,否则你自己的业务代码警告也被掩盖 - 应在 Nginx 的
location /phpmyadmin块中加:fastcgi_param PHP_VALUE "error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE"; - 确保该参数没被其他
fastcgi_param或php_admin_value覆盖(Nginx 配置中后写的生效) - 重启
php8.2-fpm和nginx,并清空 phpMyAdmin 的/tmp/缓存目录(含模板编译缓存)
最易被忽略的是:升级后没配 $cfg['SessionForceNew'] = true,也没确认登录成功时是否真正执行了 session_regenerate_id(true)。phpMyAdmin 5.2.2+ 修复了 CSRF,但不会自动堵住会话固定漏洞——攻击者仍可构造带预设 PHPSESSID 的链接诱导登录,然后直接接管会话。这需要你手动改配置、验证再生逻辑、并检查代理头透传和 session.use_strict_mode=1 是否生效。



















