Laravel应用访问报SQLSTATE[HY000][1045]权限拒绝,但migrate正常求助
嘿,我之前也碰到过几乎一模一样的情况,给你几个实用的排查和解决步骤:
清理配置缓存:Laravel会缓存环境配置文件,虽然
php artisan migrate会直接读取最新的.env内容,但Web服务器运行的应用可能还在使用旧的缓存配置。执行下面两个命令清空缓存:php artisan config:clear php artisan cache:clear之后重启你的Web服务器(比如Nginx、Apache或者Valet),再访问应用试试。
验证数据库密码是否匹配:你提到MySQL里显示的密码是
****,这只是掩码,实际密码可能和你.env里的DB_PASSWORD=root不一致。打开终端,用命令登录MySQL验证:mysql -u root -p输入你实际的MySQL root密码,如果能成功登录,就把
.env里的DB_PASSWORD改成这个正确的密码;如果用root作为密码能登录,那再往下看其他原因。修改数据库连接主机为IP:有时候
localhost在Laravel中会默认使用Unix socket连接,而php artisan migrate可能用的是TCP/IP连接,两者的权限配置可能有差异。把.env里的DB_HOST=localhost改成127.0.0.1,强制使用TCP/IP连接数据库,然后重启Web应用。检查MySQL用户的主机权限:MySQL的用户权限是和主机绑定的,
root@localhost和root@127.0.0.1是两个不同的用户身份。登录MySQL后执行以下命令查看root用户的主机权限:SELECT user, host FROM mysql.user;如果没有
root@localhost这个用户,只有root@127.0.0.1,那要么把.env的DB_HOST改成127.0.0.1,要么给root@localhost授权:GRANT ALL PRIVILEGES ON mydatabase.* TO 'root'@'localhost' IDENTIFIED BY '你的MySQL密码'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Simon

