Laravel 8执行php artisan migrate报错2002问题排查求助
问题原因定位与解决方法
第一个报错(DB_HOST=mysql时getaddrinfo失败)
这个错误的本质是本地网络无法解析mysql这个主机名:
mysql作为主机名仅在Docker等容器编排环境下生效:只有当你执行php artisan migrate的环境和MySQL服务处于同一个Docker网络、且MySQL服务的命名为mysql时,这个主机名才能被正常解析。如果是本地直接运行Laravel、或者没有在对应容器内执行命令,就会出现解析失败的报错。
第二个报错(DB_HOST=localhost时No such file or directory)
这个错误是PHP找不到MySQL的Unix套接字文件导致的:
当主机名填
localhost时,PHP默认会通过Unix套接字连接MySQL,不会走TCP网络。如果你的PHP配置里预设的套接字路径和实际MySQL运行的套接字路径不一致,就会触发这个报错。
对应解决方案
如果你使用Docker环境运行项目
- 不要在本地主机直接执行迁移命令,需要先进入Laravel对应的PHP服务容器内部再执行,示例命令:
docker exec -it <你的PHP容器名称> bash - 确认Docker编排配置(如docker-compose.yml)中的MySQL服务名称和
DB_HOST的值一致,不要随意修改服务名
如果你使用本地原生环境运行项目
- 优先将
DB_HOST修改为127.0.0.1,强制PHP走TCP协议连接MySQL,大部分场景下修改后即可正常运行 - 若修改后仍报错,按顺序检查以下配置:
- 确认本地MySQL服务已经正常启动,监听端口为3306
- 确认
.env文件中的DB_DATABASE、DB_USERNAME、DB_PASSWORD和你本地MySQL的配置完全匹配 - 若确实需要使用localhost连接,可执行
mysql_config --socket获取实际套接字路径,修改php.ini中的pdo_mysql.default_socket配置为对应路径,重启PHP服务后再执行迁移
内容的提问来源于stack exchange,提问作者abdel
相关产品推荐
相关产品推荐

