Debian 10安装pdo_mysql报错:undefined symbol: mysqlnd_allocator
解决Debian 10中pdo_mysql无法加载的问题
我来帮你搞定这个头疼的pdo_mysql加载警告!从你给出的错误信息来看,问题出在两个方向:要么找不到pdo_mysql.so文件,要么找到了但缺少依赖的mysqlnd_allocator符号——后者大概率是mysqlnd扩展没装好或者没正常加载导致的。下面是一步步的排查和解决方法:
1. 确认mysqlnd和php-mysql的安装状态
pdo_mysql依赖mysqlnd扩展,Debian 10里php-mysql包应该默认依赖php-mysqlnd,但重装过程可能出了纰漏。先检查这两个包是否都正常安装:
dpkg -l | grep -E 'php-mysql|php-mysqlnd'
如果输出里没有php-mysqlnd,或者状态不是ii(已安装),就重新安装:
sudo apt install -y php-mysqlnd
2. 定位pdo_mysql.so的实际位置
错误提示说找不到/usr/lib/php/20180731/pdo_mysql.so,先确认这个文件是否真的存在:
find /usr/lib/php -name pdo_mysql.so
- 如果找不到任何结果,说明
php-mysql包没安装完整,执行重装:sudo apt reinstall php-mysql - 如果找到了路径,比如
/usr/lib/php/20180731/pdo_mysql.so,那继续下一步检查配置。
3. 修正php.ini的配置
你之前修改了/etc/php/7.3/cli/php.ini,但可能存在两个小问题:
- 扩展名是否带
.so:PHP 7.3之后可以省略,但保险起见,把extension=pdo_mysql改成extension=pdo_mysql.so - 检查
extension_dir是否正确:在php.ini里找到extension_dir这一行,确保它指向你的PHP扩展目录,比如:
如果这行被注释了,取消注释并修正路径。extension_dir = "/usr/lib/php/20180731"
4. 确保mysqlnd扩展被加载
mysqlnd_allocator是mysqlnd提供的核心符号,如果mysqlnd没加载,pdo_mysql肯定启动失败。检查mysqlnd是否加载:
php -m | grep mysqlnd
如果没有任何输出,说明mysqlnd没被加载:
- 查看
/etc/php/7.3/cli/conf.d/目录下是否有20-mysqlnd.ini文件,如果没有,手动创建:echo "extension=mysqlnd.so" | sudo tee /etc/php/7.3/cli/conf.d/20-mysqlnd.ini - 然后重新测试
php -m | grep mysqlnd,应该就能看到输出了。
5. 验证修复结果
完成以上步骤后,执行php -m | grep pdo_mysql,如果能看到pdo_mysql,说明问题解决了。如果还是有警告,再用php --ini确认你修改的是cli模式下实际加载的php.ini文件——有时候重装会生成新的配置文件,你可能改了旧的副本。
内容的提问来源于stack exchange,提问作者nusje2000
相关产品推荐
相关产品推荐

