Plsek VPS下Laravel报Database Connection Error 1045如何解决
Plsek VPS部署Laravel报1045数据库连接错误排查方案
报错信息参考:
SQLSTATE[HY000] [1045] Access denied for user 'user_name'@'localhost' (using password: YES) (SQL: select * from `users` where `email` = admin@gmail.com limit 1)
哪怕你确认已经填完.env所有数据库配置项,按以下顺序逐一排查即可:
- 第一步:排除Laravel配置缓存不生效问题
很多人修改.env后没有刷新配置缓存,Laravel实际还在使用旧的错误配置连接数据库。到项目根目录执行以下命令清除并重载配置:php artisan config:clear php artisan cache:clear php artisan config:cache注意:站点运行用户通常是www-data、nginx这类非root用户,不要直接用root执行上述命令,否则生成的缓存文件web服务无读取权限,还是会加载旧配置。指定web运行用户执行即可,例如Debian/Ubuntu系统用
sudo -u www-data php artisan config:cache。 - 第二步:核对.env配置项的正确性
打开项目根目录的.env文件,逐一核对以下配置项,不要想当然填默认值:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=实际创建的数据库名 DB_USERNAME=实际授权的数据库用户名 DB_PASSWORD=实际设置的数据库密码- 两个高频错误点:
- DB_HOST不要随意填localhost,部分环境下localhost会走Unix socket连接,127.0.0.1走TCP连接,如果数据库用户没有授权对应连接方式的访问权限,就会报1045。如果不确定就localhost和127.0.0.1都试一遍。
- 如果数据库密码包含
#、空格、引号这类特殊字符,必须把密码值用双引号包裹,例如DB_PASSWORD="pass#word123",否则.env解析时会把#后的内容识别为注释,实际传递给数据库的密码是截断后的错误值。
- 两个高频错误点:
- 第三步:绕过Laravel直连数据库验证账号有效性
直接在VPS命令行用你配置的账号密码连接数据库,确认账号本身可用:
回车后输入你配置的DB_PASSWORD,如果这一步都连接失败,说明问题和Laravel无关,是数据库账号配置错误,常见处理方式:mysql -u 你配置的DB_USERNAME -p -h 你配置的DB_HOST- 确认密码输入正确,若记不清密码直接登录数据库root账号重置即可
- 账号没有对应主机的访问授权,用root账号登录数据库后执行以下授权命令,把本地连接的权限补上:
GRANT ALL PRIVILEGES ON 你的数据库名.* TO 'user_name'@'localhost' IDENTIFIED BY '你的数据库密码'; GRANT ALL PRIVILEGES ON 你的数据库名.* TO 'user_name'@'127.0.0.1' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES;
- 第四步:排查环境特殊兼容问题
- 如果你用的是MariaDB,部分版本默认启用unix_socket认证插件,即使密码正确也会拒绝密码登录,执行以下命令改成常规的密码认证方式即可:
ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的数据库密码'; FLUSH PRIVILEGES; - 执行
systemctl status mysql或systemctl status mariadb确认数据库服务处于正常运行状态,服务未启动时也可能抛出类似连接错误。 - 如果是CentOS、AlmaLinux这类默认开启SELinux的系统,SELinux可能拦截web进程访问数据库的请求,可临时关闭SELinux测试,若关闭后连接正常,添加对应SELinux放行规则即可,不要长期关闭SELinux。
- 如果你用的是MariaDB,部分版本默认启用unix_socket认证插件,即使密码正确也会拒绝密码登录,执行以下命令改成常规的密码认证方式即可:
内容的提问来源于stack exchange,提问作者Dipesh Khanal
相关产品推荐
相关产品推荐

