Rocky Linux 9 上不能直接用 yum install phpmyadmin 安装可用的 phpMyAdmin,因默认 EPEL 包依赖过时的 php-mysql,不兼容 PHP 8.1+,会导致“Call to undefined function mysqli_connect()”或空白页;必须手动部署官方最新版(如 5.2.x 或 6.0.x LTS),并正确配置扩展、SELinux 上下文、Apache 访问控制及 session 目录权限。

Rocky Linux 9 上不能直接用 yum install phpmyadmin 安装可用的 phpMyAdmin —— 默认仓库里那个包依赖过时的 php-mysql(已废弃),且不兼容 PHP 8.1+ 的默认模块加载机制,装完必然报错“Call to undefined function mysqli_connect()”或空白页。
确认 PHP MySQL 扩展是否真正启用
Rocky 9 默认用 PHP-FPM + Apache 模块(libphp.so)或 proxy_fcgi 方式运行 PHP,但很多教程漏掉关键一步:扩展必须被 PHP 进程实际加载,而不仅仅是安装了 RPM 包。
- 运行
php -m | grep -E 'mysqli|pdo_mysql',必须看到两行输出;若无,说明扩展未启用 - 检查
/etc/php.d/下是否有30-mysqli.ini和30-pdo_mysql.ini,内容应为extension=mysqli和extension=pdo_mysql - 若文件存在但没生效,可能是 SELinux 阻断了 PHP 读取扩展目录:
ls -Z /etc/php.d/看上下文是否为system_u:object_r:httpd_php_t:s0;不是就执行restorecon -Rv /etc/php.d/ - 改完务必重启服务:
systemctl restart httpd php-fpm
下载并部署 phpMyAdmin 而非用系统包
Rocky 9 的 EPEL 仓库中 phpmyadmin 包版本老旧(如 5.0.x),不支持 PHP 8.1 的严格类型检查,登录页会直接 fatal error。必须手动部署官方最新稳定版。
- 去 phpmyadmin.net/downloads 下载
phpMyAdmin-*-all-languages.tar.gz(2026 年推荐用 5.2.x 或 6.0.x LTS 版) - 解压到
/usr/share/phpmyadmin,然后创建符号链接:ln -sf /usr/share/phpmyadmin /var/www/html/phpmyadmin - 复制配置模板:
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php - 编辑
config.inc.php,至少设置三项:-
$cfg['blowfish_secret'] = '随机32字符字符串';(必须填,否则登录页报错) -
$cfg['Servers'][$i]['auth_type'] = 'cookie';(别用 config,明文存密码太危险) -
$cfg['Servers'][$i]['host'] = 'localhost';(若 MySQL 启用了 socket,可加$cfg['Servers'][$i]['socket'] = '/var/lib/mysql/mysql.sock';)
-
Apache 配置需显式放开访问控制
Rocky 9 的 Apache 2.4.5x 默认启用 Require all denied 全局策略,即使你把 phpMyAdmin 放进 /var/www/html,也会返回 403。
立即学习“PHP免费学习笔记(深入)”;
- 新建
/etc/httpd/conf.d/phpmyadmin.conf,内容如下:
<Directory "/var/www/html/phpmyadmin">
Require local
<IfModule mod_authz_core.c>
Require ip 192.168.1.0/24
</IfModule>
</Directory>
- 注意:不要写
Require all granted,那是高危配置;生产环境必须限制 IP 段或走反向代理 + 认证 - 如果要用域名访问(如 pma.example.com),必须额外配
VirtualHost并确保 DNS 或 hosts 已解析,否则浏览器会因跨域或证书问题卡在登录框 - 改完运行
httpd -t检查语法,再systemctl reload httpd
登录失败常见原因与快速定位
页面能打开但输完账号密码后跳回登录页、或提示“#2002 Cannot log in to the MySQL server”,基本不是 phpMyAdmin 本身的问题,而是底层链路断了。
- 先看 Apache 错误日志:
tail -f /var/log/httpd/error_log,出现PHP Fatal error: Uncaught Error: Call to undefined function mb_detect_encoding()?说明缺php-mbstring——dnf install php-mbstring并重启 - 出现
mysqli_real_connect(): (HY000/2002): No such file or directory?说明 PHP 找不到 MySQL socket,确认mysql.sock路径(mysql --socket=/var/lib/mysql/mysql.sock -u root -p测试),并在config.inc.php中显式指定 - 登录后点数据库列表报空页?大概率是
php-opcache缓存了旧的错误字节码,临时禁用:sed -i 's/^opcache.enable=1/opcache.enable=0/' /etc/php.d/10-opcache.ini,再重启php-fpm
最关键的细节常被忽略:Rocky 9 的 php-fpm 默认以 apache 用户运行,但 phpMyAdmin 的 session 目录(/var/lib/php/session)属主可能是 root 或 nginx,导致 session 写失败,登录态无法维持 —— 务必执行 chown apache:apache /var/lib/php/session 并确认 SELinux 上下文为 httpd_sys_rw_content_t。



















