Debian11下PHP8.2 CLI无法加载mysqlnd等MySQL相关扩展问题
解决Debian11下PHP8.2 CLI模式MySQL扩展加载失败问题
问题核心分析
从报错信息看,mysqlnd.so无法找到EVP_PKEY_CTX_new符号(属于OpenSSL库),后续mysqli和pdo_mysql因依赖mysqlnd也加载失败。这通常是PHP CLI的扩展依赖缺失、库版本不匹配,或是系统中存在多版本PHP冲突导致的。
分步解决方案
1. 检查mysqlnd扩展的依赖库
执行以下命令查看mysqlnd.so的依赖是否完整:
ldd /usr/lib/php/20220829/mysqlnd.so
如果输出中出现not found的项(尤其是libcrypto相关),说明依赖库缺失。
2. 修复OpenSSL依赖
Debian11默认使用OpenSSL 1.1.1,安装对应的开发包以确保依赖完整:
apt update && apt install libssl-dev
3. 彻底重装PHP MySQL相关扩展
先卸载现有扩展,再重新安装:
apt purge php8.2-mysql php8.2-mysqlnd apt install php8.2-mysql php8.2-mysqlnd
注:Debian中
php8.2-mysql依赖mysqlnd,重装会自动处理依赖关系。
4. 调整CLI配置的扩展加载顺序
编辑CLI的php.ini文件:
nano /etc/php/8.2/cli/php.ini
确保扩展加载顺序为mysqlnd优先,后加载mysqli和pdo_mysql,取消对应行的注释:
extension=mysqlnd extension=mysqli extension=pdo_mysql
5. 验证CLI配置路径与扩展目录
确认CLI使用的是正确的配置文件:
php -i | grep "Loaded Configuration File"
输出应指向/etc/php/8.2/cli/php.ini。同时检查扩展目录:
php -i | grep "extension_dir"
输出应匹配/usr/lib/php/20220829/。
6. 排查多版本PHP冲突
如果之前手动编译过PHP,可能存在路径冲突,检查当前PHP CLI的路径:
which php
如果输出是/usr/local/bin/php,说明系统优先使用了手动编译的版本,需要删除该版本或调整PATH:
rm /usr/local/bin/php
之后重新运行which php,确认指向/usr/bin/php。
内容的提问来源于stack exchange,提问作者DarkLlama
相关产品推荐
相关产品推荐

