PHP 8.1 运行 phpMyAdmin 报“缺少 mysqli 扩展”或“mbstring not loaded”,根本原因是 LNMP 环境中 PHP-FPM 实际加载的 php.ini(如 /usr/local/php81/etc/php.ini)未启用 extension=mysqli、extension=mbstring 等硬性依赖项,且未重启 lnmp php-fpm restart 导致配置未生效。

PHP 8.1 跑 phpMyAdmin 报错“缺少 mysqli 扩展”或“mbstring not loaded”,不是 phpMyAdmin 装错了,而是 LNMP 环境里 PHP 8.1 的扩展没配全——LNMP 一键包默认只装基础扩展,mysqli、mbstring、json、zip、gd 这几个是 phpMyAdmin 启动硬性依赖,缺一个都进不去登录页。
确认当前 PHP 8.1 实际加载的 php.ini 路径
LNMP 多版本共存时,CLI 和 Web(PHP-FPM)用的是两套 php.ini。直接改错文件等于白干。
- 查 PHP-FPM 加载的配置:运行
ps aux | grep php-fpm,找到主进程启动命令,一般带--fpm-config或-c参数;更稳的方法是新建/home/wwwroot/default/phpinfo.php,内容为<?php phpinfo(); ?>,浏览器访问后搜索 “Loaded Configuration File” - 常见路径(以 LNMP 1.9+ 为例):
/usr/local/php81/etc/php.ini(注意不是/usr/local/php/etc/php.ini,后者通常是旧版 PHP 的) - 别信
php --ini输出的 CLI 配置——它和 nginx + php-fpm 完全无关
启用 mysqli、mbstring 等核心扩展(Linux / LNMP)
LNMP 默认安装 PHP 8.1 时,mysqli 和 mbstring 是编译进内核的,但 php.ini 里默认注释掉了加载行。你得手动“打开开关”。
- 编辑对应 php.ini:
vi /usr/local/php81/etc/php.ini - 取消注释以下几行(删掉前面的分号
;):extension=mysqliextension=mbstringextension=jsonextension=zipextension=gd - 检查
extension_dir是否指向正确目录,LNMP 下通常是:extension_dir = "/usr/local/php81/lib/php/extensions/no-debug-non-zts-20210902/"(路径末尾的 hash 值随 PHP 版本变,ls /usr/local/php81/lib/php/extensions/看一眼确认) - 保存后必须重启 PHP-FPM:
lnmp php-fpm restart(不要只 reload,restart 才能重读 ini)
验证扩展是否真生效(别跳过这步)
重启完不等于成功。很多人的错误就卡在“以为启了,其实没启”。
立即学习“PHP免费学习笔记(深入)”;
- CLI 验证(仅作参考):
/usr/local/php81/bin/php -m | grep -E "mysqli|mbstring"—— 这里看到不等于 Web 生效 - Web 真实验证:打开
http://你的IP/phpinfo.php,搜索mysqli,必须看到完整模块信息区块(含 Client API version、Active Persistent Links 等字段),同理确认mbstring、json也都存在 - 如果仍报错,立刻检查 nginx 错误日志:
tail -f /usr/local/nginx/logs/error.log,常见报错如Unable to load dynamic library 'mysqli'就说明extension_dir路径不对或文件名拼错
额外注意:blowfish_secret 和 MySQL 用户权限
扩展全了,phpMyAdmin 还可能卡在登录页或报“#2002 Cannot log in to the MySQL server”,这和扩展无关,但常被一起排查。
-
blowfish_secret必须设置:编辑/home/wwwroot/default/phpmyadmin/config.inc.php,确保有类似这行(值不能为空):$cfg['blowfish_secret'] = 'a647b82e1d9d5c...'; - MySQL 用户需有远程访问权限(尤其 LNMP 默认 bind-address=127.0.0.1):登录 MySQL 执行
CREATE USER 'pma'@'localhost' IDENTIFIED BY 'yourpass'; GRANT ALL ON *.* TO 'pma'@'localhost'; FLUSH PRIVILEGES; - LNMP 下 phpMyAdmin 默认走 socket 连接,确保
mysqli.default_socket指向正确路径(如/tmp/mysql.sock或/var/lib/mysql/mysql.sock),可在 php.ini 里显式配置
最容易被忽略的是:LNMP 切换 PHP 版本后,php.ini 不会自动同步更新,所有扩展开关都要手动开一遍;而很多人验证只看命令行,却忘了 Web 服务根本没读那个文件。



















