Laravel项目数据库连接失败求助:SQLSTATE[HY000] [1045]权限错误
解决Laravel连接MySQL时的1045权限拒绝错误
这个错误其实很典型,就是你的Laravel项目配置的数据库凭证和MySQL实际的用户权限不匹配导致的。咱们一步步来排查解决:
1. 先确认MySQL root用户的密码状态
错误里明确写了using password: NO,说明Laravel是用空密码尝试连接的,但你的MySQL root用户大概率是设置了密码的。你可以先手动验证:
打开命令行终端,输入:
mysql -u root -p
如果终端提示你输入密码才能登录MySQL,那就说明root用户确实有密码,而你的Laravel配置里没填,这就是问题根源。
2. 修正Laravel的环境配置
找到你项目根目录下的.env文件(这个是Laravel优先读取的环境配置文件),定位到数据库相关的配置项:
DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3308 DB_DATABASE=rentable DB_USERNAME=root DB_PASSWORD=
把DB_PASSWORD=后面的空值改成你的MySQL root用户的实际密码,比如你的密码是myrootpass123,就改成:
DB_PASSWORD=myrootpass123
⚠️ 注意:修改完.env后,一定要清除Laravel的配置缓存,不然可能还是会用旧的缓存配置,执行命令:
php artisan config:clear
3. 检查MySQL用户的主机权限
有时候即使密码对了,root@localhost这个用户可能没有访问rentable数据库的权限。你可以登录MySQL后执行以下SQL来排查:
-- 查看root用户的主机列表 SELECT user, host FROM mysql.user WHERE user = 'root'; -- 查看root@localhost的权限 SHOW GRANTS FOR 'root'@'localhost';
如果发现root@localhost没有rentable数据库的权限,执行下面的SQL来授权:
GRANT ALL PRIVILEGES ON rentable.* TO 'root'@'localhost'; FLUSH PRIVILEGES;
4. 确认MySQL端口是否正确
错误里显示Laravel尝试连接的是3308端口,而MySQL默认端口是3306。如果你没有修改过MySQL的端口配置,那可能是.env里的DB_PORT填错了,改成3306再试试。
内容的提问来源于stack exchange,提问作者user9726704
相关产品推荐
相关产品推荐

