Laravel 9本地环境连接MySQL报root@localhost访问被拒错误
Laravel 9 本地MySQL连接失败修复方案
问题核心
报错Access denied for user 'root'@'localhost' (using password: NO)的直接原因是Laravel实际加载的数据库配置不符合预期,当前.env配置写法存在语法问题,加上缓存未彻底清理,导致配置没有正确生效。
修复步骤
- 修正.env配置格式
Laravel的.env文件解析规则中,引号会被作为值的一部分读取,你当前配置里DB_USERNAME='root'会被解析为带单引号的用户名'root',DB_PASSWORD=""会被解析为值是两个双引号的字符串,而非空密码。把数据库配置段替换为以下无引号格式,DB_PASSWORD=后直接留空,不要加空格、引号:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
- 彻底清理所有Laravel缓存
只清理config缓存不够,旧的应用缓存、服务启动时加载的缓存配置都会影响结果,依次执行以下命令:
php artisan config:clear php artisan cache:clear php artisan route:clear php artisan view:clear
如果你是用php artisan serve启动的本地服务,直接终止进程后重新执行启动命令,不要复用已经启动的旧服务进程。
- 校验实际加载的配置
执行以下命令进入tinker交互模式,打印实际加载的MySQL连接配置,确认参数没有多余符号:
php artisan tinker >>> config('database.connections.mysql')
检查返回结果中username字段值为纯字符串root,password字段为空字符串,不存在多余的引号、空格即为正确。
- 特殊场景适配
如果以上操作完成后仍报错,检查本地MySQL连接方式:- 如果你是Linux/macOS本地环境,尝试把
DB_HOST改为localhost,或者在.env中新增配置指定MySQL实际的unix socket路径:
- 如果你是Linux/macOS本地环境,尝试把
DB_SOCKET=/tmp/mysql.sock
socket路径以你本地MySQL配置的实际路径为准,Windows环境跳过该步骤。
验证方法
配置调整完成后,在项目根目录执行php artisan migrate,如果迁移命令正常执行无连接报错,即代表数据库连接恢复正常。
内容的提问来源于stack exchange,提问作者Sir Charles
相关产品推荐
相关产品推荐

