Laravel生产环境数据库访问被拒绝问题求助
解决Laravel 5.8部署时数据库访问错误的方案
看到你遇到的Access denied for user 'root'@'127.0.0.1' (using password: NO)错误,其实是你的应用实际在使用默认的root无密码配置访问数据库,但你的自定义账号配置没生效。我帮你梳理几个关键问题和修复步骤:
1. .env文件的单引号问题
Laravel的.env配置里,变量值不需要包裹单引号——这些引号会被当成值的一部分,导致你的账号密码实际是'secret'而不是secret。修改后的.env数据库配置应该是:
DB_CONNECTION=mysql DB_HOST=你的实际数据库主机IP(比如127.0.0.1或远程服务器IP) DB_PORT=3306 DB_DATABASE=secret DB_USERNAME=secret DB_PASSWORD=secret
2. database.php的两处致命错误
你的数据库配置文件有两个核心问题,直接导致配置失效:
- 数组键名错误:Laravel的数据库连接配置是在
connections数组下的mysql键,而不是你写的users。如果键名不对,Laravel会自动使用默认的root无密码配置,这就是错误提示里出现root用户的原因。 - 变量拼写错误:密码对应的环境变量你写成了
DB_PASSNORD,正确的应该是DB_PASSWORD(少了一个字母W),导致程序读取不到你设置的密码。
修正后的database.php中connections部分的mysql配置示例:
'connections' => [ // 其他连接配置... 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', ''), 'username' => env('DB_USERNAME', ''), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], // 其他连接配置... ],
3. 清除Laravel配置缓存
生产环境中Laravel会缓存配置文件,修改完.env和database.php后必须执行以下命令让新配置生效:
php artisan config:cache php artisan cache:clear
额外验证步骤
- 确认
DB_HOST填写正确:如果数据库和应用在同一服务器,填127.0.0.1;如果是远程数据库,要填写实际的远程IP,同时确保远程数据库允许你的应用服务器IP访问。 - 测试数据库账号有效性:用mysql命令行直接测试连接,确认账号密码和权限没问题:
mysql -h 你的DB_HOST -u secret -p secret
输入密码后如果能正常登录,说明数据库端的配置没问题。
内容的提问来源于stack exchange,提问作者David Victoria Martinez
相关产品推荐
相关产品推荐

