部署Laravel 9项目至VPS时遇SQLSTATE[28000] [1045]权限错误求助
Laravel 9 部署时SQLSTATE[28000] [1045] 错误排查方案
针对你遇到的SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)错误,按以下步骤排查:
验证.env文件的有效性
- 确认服务器上的
.env文件确实存在且内容正确,避免本地文件未上传或上传后被覆盖。 - 检查文件权限:运行
ls -la .env,确保服务器的Web进程(如www-data或nginx用户)拥有读取权限,必要时执行chmod 644 .env调整。 - Laravel会缓存配置文件,修改
.env后必须清理缓存:php artisan config:clear # 生产环境清理后重新缓存 php artisan config:cache
- 确认服务器上的
检查数据库配置的硬编码情况
打开config/database.php,查看MySQL配置段:'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), // ...其他配置 ],如果
.env中的DB_USERNAME或DB_PASSWORD未生效,Laravel会使用这里的默认值,导致以无密码的root用户连接数据库。直接测试数据库连接
在服务器终端执行命令测试数据库账号是否可用:mysql -u your_db_user -p your_db_name输入对应密码后如果能正常登录,说明数据库本身配置没问题,问题出在Laravel的配置读取环节。
排查环境变量覆盖
部分服务器可能通过系统环境变量或PHP配置覆盖了.env中的值。在项目根目录创建临时文件test_env.php:<?php echo "DB_USERNAME: " . env('DB_USERNAME') . "<br>"; echo "DB_PASSWORD: " . env('DB_PASSWORD') . "<br>"; ?>访问该文件,查看输出的数据库账号密码是否和
.env一致,若不一致则说明存在环境变量覆盖。确认项目目录权限
确保storage和bootstrap/cache目录拥有Web进程的读写权限:chmod -R 755 storage bootstrap/cache # 或根据服务器Web用户调整归属 chown -R www-data:www-data /path/to/your/project
内容的提问来源于stack exchange,提问作者Dingakill
相关产品推荐
相关产品推荐

