Laravel子域名部署时MySQL连接失败(SQLSTATE[HY000][2002])求助
Laravel数据库连接错误(SQLSTATE[HY000] [2002])解决思路
针对你遇到的无法连接127.0.0.1数据库的错误,以下是具体排查步骤:
确认MySQL服务状态
检查本地/服务器上的MySQL服务是否正在运行:- Linux系统执行:
systemctl status mysql,如果未运行,启动服务:systemctl start mysql - Windows系统:打开「服务」面板,找到MySQL服务确认状态,未启动则手动启动
- Linux系统执行:
验证端口监听情况
你配置的DB_PORT是8889,需确认该端口确实被MySQL进程监听:- Linux执行:
netstat -an | grep 8889或ss -tulpn | grep 8889 - Windows执行:
netstat -ano | findstr :8889
如果没有结果,说明MySQL未监听该端口,需修改MySQL配置文件(my.cnf/my.ini)中的port参数为8889,重启服务
- Linux执行:
检查MySQL绑定地址
打开MySQL配置文件,查看*bind-address*参数:- 如果是本地部署,确保值为
127.0.0.1或0.0.0.0(允许所有IP连接) - 如果是服务器上的远程数据库,需确认bind-address未限制为仅特定IP,且你的应用服务器有权限连接
- 如果是本地部署,确保值为
排查防火墙/安全组限制
- 服务器本地防火墙:Linux检查ufw/iptables是否开放8889端口,例如ufw执行:
ufw allow 8889;Windows可临时关闭防火墙测试 - 云服务器安全组:如果是云主机,需在控制台添加入站规则,允许8889端口的TCP连接
- 服务器本地防火墙:Linux检查ufw/iptables是否开放8889端口,例如ufw执行:
清除Laravel配置缓存
Laravel会缓存配置文件,确保.env修改生效:
执行命令:php artisan config:clear命令行直接测试数据库连接
绕过Laravel直接测试数据库连通性,排除框架问题:
执行:mysql -h 127.0.0.1 -P 8889 -u database_username -p,输入密码后如果能进入MySQL终端,说明数据库本身没问题,需排查Laravel配置;如果连接失败,问题出在数据库端检查数据库用户权限
MySQL中localhost和127.0.0.1属于不同主机身份,确认你的数据库用户拥有从127.0.0.1连接的权限:
登录MySQL执行:SELECT user, host FROM mysql.user;,如果用户的host是localhost,需添加'database_username'@'127.0.0.1'的权限:GRANT ALL PRIVILEGES ON database_name.* TO 'database_username'@'127.0.0.1' IDENTIFIED BY 'database_password'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者alban
相关产品推荐
相关产品推荐

