You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel执行php artisan migrate遇驱动缺失及1045权限错误求助

Laravel 数据库迁移错误:从驱动缺失到权限拒绝的排查与解决

咱们一步步拆解你遇到的两个问题,先理清每个错误的根源,再给出对应的解决办法:


第一个错误:could not find driver

错误含义

这个提示直白来说就是:你的PHP环境里没有安装MySQL的PDO驱动。Laravel依赖PDO(PHP数据对象)来连接数据库,当PHP找不到MySQL对应的PDO驱动时,就会抛出这个错误,根本没法和MySQL建立连接。

收尾解决步骤

你执行的扩展安装命令是完全正确的:

sudo apt-get install php-pear php7.2-curl php7.2-dev php7.2-gd php7.2-mbstring php7.2-zip php7.2-mysql php7.2-xml

其中php7.2-mysql就是咱们需要的PDO MySQL驱动。不过安装完扩展后,别忘了重启你的Web服务和PHP-FPM,让新安装的扩展生效:

# 如果你用的是Apache
sudo systemctl restart apache2

# 如果你用的是Nginx + PHP-FPM
sudo systemctl restart nginx
sudo systemctl restart php7.2-fpm

第二个错误:Access denied for user 'root'@'localhost' (using password: NO)

错误含义

这个错误说明驱动问题已经解决了,现在PHP能尝试连接MySQL,但你的root账号身份验证失败。具体来说:你在.env里设置了空密码,但你的MySQL root账号要么有密码,要么不允许用空密码从localhost登录(比如Ubuntu默认的MySQL配置里,root是用socket认证,不是密码)。

解决步骤

咱们分三步来搞定:

1. 检查MySQL root账号的认证方式

先登录MySQL控制台(如果root原来有密码,输入密码回车):

mysql -u root -p

登录成功后,执行这条SQL查看root用户的配置:

SELECT user, host, authentication_string FROM mysql.user WHERE user = 'root';
  • 如果看到authentication_string不为空,说明root有密码,你需要把.env里的DB_PASSWORD改成对应的密码
  • 如果看到root的认证方式是auth_socket(Ubuntu系统默认就是这样),那root没法用密码登录,只能通过系统用户身份连接。这时候建议你创建一个专门给Laravel用的数据库用户:
    -- 创建用户,替换your_password为你想设置的密码
    CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'your_password';
    -- 给这个用户授予blog数据库的所有权限
    GRANT ALL PRIVILEGES ON blog.* TO 'laravel_user'@'localhost';
    -- 刷新权限让配置生效
    FLUSH PRIVILEGES;
    
    然后修改.env的配置:
    DB_USERNAME=laravel_user
    DB_PASSWORD=your_password
    

2. 确认blog数据库存在

登录MySQL后,检查数据库列表:

SHOW DATABASES;

如果没看到blog,就手动创建:

CREATE DATABASE blog;

3. 清除Laravel的配置缓存

修改.env后,Laravel可能缓存了旧的配置,必须清除缓存才能让新配置生效:

php artisan config:clear

做完这些,再重新执行php artisan migrate,应该就能正常运行了。

内容的提问来源于stack exchange,提问作者Loctarogar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:08:38