phpEnv 不支持安装 MariaDB,它仅管理 PHP 版本;需在系统级安装 MariaDB 服务,并通过配置 mysqli.default_socket 等确保 PHP 连接正确 socket 路径。

phpEnv 本身不支持直接添加 MariaDB 版本——它是一个面向 PHP 的多版本环境管理工具(类似 pyenv / rbenv),核心只管 PHP 解释器和扩展,数据库需由系统级服务提供,不能“装在 phpEnv 里”。你真正需要的是:在已安装 phpEnv 的 Linux 系统上,让 PHP 能连上指定版本的 MariaDB 服务。
为什么 phpenv 命令找不到 mariadb 相关子命令
phpenv 的命令列表(phpenv commands)里没有 install-mariadb 或类似项,因为它压根不负责数据库。常见误解是把它当成全栈环境工具,但它的职责边界非常明确:只切换 php 可执行文件路径、管理 ~/.phpenv/versions/ 下的 PHP 安装目录。
- 试图运行
phpenv install mariadb-10.6会报错:command not found - 即使手动把 MariaDB 二进制丢进
~/.phpenv/versions/,PHP 启动时也根本不会加载它——MariaDB 是独立守护进程,不是 PHP 扩展 - PHP 连数据库靠的是
mysqli或PDO_mysql扩展,它们只依赖系统中运行着的 MySQL/MariaDB 服务,不关心服务是哪个包装的
CentOS 7/8 上正确安装指定 MariaDB 版本的实操要点
你需要绕过系统默认源,用官方仓库精确控制版本。例如装 MariaDB 10.5(非 CentOS 8 自带的 10.3):
- 先清理冲突包:
yum remove mariadb-server mariadb-libs(避免file conflicts错误) - 创建
/etc/yum.repos.d/MariaDB.repo,内容必须匹配你的系统架构和版本:[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.5/centos8-amd64 gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck = 1
- 关键一步:执行
yum install MariaDB-server-10.5.19-1.el8.x86_64 MariaDB-client-10.5.19-1.el8.x86_64(显式指定完整 RPM 包名,防止 yum 自动降级) - 启动后验证:
mysql --version输出应为mysql Ver 15.1 Distrib 10.5.19-MariaDB
让 PHP(无论哪个 phpEnv 版本)连上这个 MariaDB
只要 mysqli 扩展启用,PHP 就能连——和 phpEnv 切换的 PHP 版本无关。检查和修复常见断连点:
立即学习“PHP免费学习笔记(深入)”;
- 确认扩展已载入:
php -m | grep mysqli;若无输出,编辑对应 PHP 版本的php.ini(路径如~/.phpenv/versions/8.2.12/etc/php.ini),取消注释extension=mysqli - 连接时指定 host:
new mysqli('127.0.0.1', 'root', 'pass', 'test')(别用localhost,否则可能走 socket 而非 TCP,而 MariaDB 默认 socket 路径未必在 PHP 预期位置) - 如果报错
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock',说明 PHP 查找 socket 路径错了。在php.ini中加一行:mysqli.default_socket = /var/run/mysqld/mysqld.sock(路径以mysql --socket输出为准) - 防火墙要放行 3306:
firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload
真正容易被忽略的是 socket 路径不一致问题——MariaDB 安装后实际 socket 文件位置(ls -l /var/run/mysqld/)和 PHP 编译时硬编码的默认路径(/var/lib/mysql/mysql.sock)经常对不上,不显式配置 mysqli.default_socket 就会静默失败。



















