执行doctrine:migrations:migrate报SQLSTATE[HY000][2002]连接被拒的解决方法
报错含义
SQLSTATE[HY000] [2002] Connection refused属于数据库连接阶段的网络层错误,代表执行迁移命令的PHP进程按照配置的127.0.0.1:3306地址发起TCP连接时,目标端口没有可响应的数据库服务,该错误和数据库账号权限、库表结构、迁移脚本逻辑无关,不需要排查SQL或迁移代码本身的问题。
修复步骤
按优先级依次排查即可:
- 检查数据库服务运行状态
如果是宿主机直接安装的MariaDB/MySQL:- Linux系统执行
systemctl status mariadb(部分发行版服务名为mysql)查看服务状态,未启动则执行systemctl start mariadb启动服务 - Windows系统打开服务管理器,找到MariaDB/MySQL服务,确认状态为「正在运行」,未运行则手动启动
- Mac系统通过homebrew安装的话执行
brew services list查看服务状态,未启动执行brew services start mariadb启动
如果是Docker部署的数据库:执行docker ps查看数据库容器状态,若容器未在运行列表中,执行docker start 你的数据库容器名启动容器。
- Linux系统执行
- 核对连接地址与端口配置
- 如果PHP应用跑在宿主机、数据库跑在Docker容器中:需要确认数据库容器启动时加了
-p 3306:3306的端口映射参数,没有端口映射的话宿主机的127.0.0.1:3306无法访问到容器内的数据库 - 如果PHP应用本身也跑在Docker容器中:不能用127.0.0.1作为数据库地址,容器内的127.0.0.1指向容器自身,需要换成数据库容器在Docker网络内的服务名/容器名作为连接地址
- 如果你的数据库修改过默认监听端口,需要把
DATABASE_URL中端口段的3306替换为实际监听端口
- 如果PHP应用跑在宿主机、数据库跑在Docker容器中:需要确认数据库容器启动时加了
- 验证端口连通性
完成前两步检查后,在执行php命令的环境下执行telnet 127.0.0.1 3306测试端口连通性,连通成功会返回数据库版本相关的字符,连通失败会直接提示连接拒绝,回到前序步骤重新排查服务状态和网络配置即可。 - 校验连接账号与库信息
端口连通后,确认DATABASE_URL中配置的root账号密码(当前配置为空密码)和实际数据库密码一致,且数据库中已经提前创建了db_docker这个目标库,不存在的话手动创建后再执行迁移命令。
内容的提问来源于stack exchange,提问作者Farronilucas
相关产品推荐
相关产品推荐

