Laravel+Vagrant+Homestead使用unique校验时报MySQL访问被拒问题
问题排查与解决步骤
这个问题的核心是本地执行Artisan命令、Homestead虚拟机内运行Web请求两套场景下的数据库配置不匹配导致的,按照以下步骤排查即可解决:
- 先确认
.env文件的数据库配置是否匹配Homestead环境
Homestead虚拟机内置MySQL的默认配置如下,直接替换你的.env对应字段即可:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
注意:如果你是在本地物理机直接执行
php artisan migrate这类命令,需要临时把DB_PORT改为33060才能连接到虚拟机映射出来的MySQL端口;如果是通过Homestead的Nginx访问项目,端口必须保持3306。不想来回改的话可以把DB_HOST改为192.168.10.10(Homestead默认虚拟机IP,可在Homestead.yaml里确认),两个场景下都可以用3306端口不用修改。
- 清理Laravel配置缓存
修改完.env后,进入Homestead虚拟机内项目根目录执行以下命令清除旧的缓存配置:php artisan config:clear - 确认数据库账号权限
如果修改配置后依然报错,按以下步骤校验账号权限:
- 本地执行
vagrant ssh进入Homestead虚拟机 - 执行
mysql -u homestead -p,输入密码secret登录MySQL - 执行SQL查看权限:
SHOW GRANTS FOR 'homestead'@'localhost';
如果权限不足,执行以下语句赋权后重试:
GRANT ALL PRIVILEGES ON homestead.* TO 'homestead'@'localhost'; FLUSH PRIVILEGES;
- 特殊场景校验
如果你没有用Homestead自带的Nginx,而是在本地物理机跑php artisan serve启动服务,需要保持DB_PORT=33060,同时确认Homestead处于正常运行状态、本地33060端口没有被其他程序占用。
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

