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

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=实际设置的数据库密码
    
    • 两个高频错误点:
      1. DB_HOST不要随意填localhost,部分环境下localhost会走Unix socket连接,127.0.0.1走TCP连接,如果数据库用户没有授权对应连接方式的访问权限,就会报1045。如果不确定就localhost和127.0.0.1都试一遍。
      2. 如果数据库密码包含#、空格、引号这类特殊字符,必须把密码值用双引号包裹,例如DB_PASSWORD="pass#word123",否则.env解析时会把#后的内容识别为注释,实际传递给数据库的密码是截断后的错误值。
  • 第三步:绕过Laravel直连数据库验证账号有效性
    直接在VPS命令行用你配置的账号密码连接数据库,确认账号本身可用:
    mysql -u 你配置的DB_USERNAME -p -h 你配置的DB_HOST
    
    回车后输入你配置的DB_PASSWORD,如果这一步都连接失败,说明问题和Laravel无关,是数据库账号配置错误,常见处理方式:
    1. 确认密码输入正确,若记不清密码直接登录数据库root账号重置即可
    2. 账号没有对应主机的访问授权,用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。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:12:24