Debian10 Apache部署Laravel连接MySQL报could not find driver错误
问题根因
这是Debian环境下PHP CLI与Apache Web运行环境配置隔离导致的典型问题:你执行php -m看到的扩展加载状态、php artisan migrate能正常运行,仅能说明终端命令行场景下的PHP已经加载了MySQL驱动,Apache处理Web请求时调用的PHP使用独立的配置文件、独立的扩展加载逻辑,和CLI环境不互通,这就是报错的核心原因。
修复步骤
- 先确认Apache实际使用的PHP环境
在Laravel项目的public目录下新建临时探针文件phpinfo.php,写入如下内容:
<?php phpinfo();
通过浏览器访问http://你的项目访问地址/phpinfo.php,记录两个关键信息:
- 页面显示的PHP版本号,大概率和你终端执行
php -v返回的版本不一致 Loaded Configuration File(加载的配置文件路径)、Scan this dir for additional .ini files(扩展配置扫描目录)两个参数的路径,这就是Apache运行PHP时实际读取的配置位置,和终端执行php --ini返回的路径通常不相同- 为Apache对应的PHP环境启用pdo_mysql扩展
根据探针查到的PHP版本号,替换下面命令里的X.X为实际版本号执行:
sudo apt install phpX.X-mysql sudo phpenmod -s apache2 pdo_mysql
注意-s apache2参数不能省略,默认执行phpenmod只会给CLI环境启用扩展,不会同步给Apache的运行环境,这也是你之前装了扩展依然报错的核心原因。
- 重启服务验证效果
执行命令重启Apache:
sudo systemctl restart apache2
刷新之前的phpinfo探针页面,搜索pdo_mysql,如果能看到对应的扩展信息块,说明驱动加载成功。此时再提交登录请求,驱动找不到的报错就会消失。
- 验证完成后立刻删除
public目录下的phpinfo.php文件,避免泄露服务器配置信息带来安全风险。
补充说明
- Debian系的PHP扩展不建议手动修改php.ini里的
extension=xxx配置行,系统是通过/etc/php/版本号/运行模式/conf.d/目录下的软链接来管理扩展启用状态的,手动修改ini很容易改错路径导致配置不生效,使用phpenmod、phpdismod命令管理扩展才是标准方式。 - 如果你是用PHP-FPM模式搭配Apache运行,而不是用Apache自带的mod_php,那启用扩展时把
-s apache2替换为-s fpm,重启服务时额外重启对应版本的FPM服务即可:
sudo systemctl restart phpX.X-fpm sudo systemctl restart apache2
内容的提问来源于stack exchange,提问作者Baptiste Coquelet
相关产品推荐
相关产品推荐

