Laravel项目重启数据库工作站后无法登录,报SQLSTATE[HY000][2002]连接错误
这种数据库连接超时的问题我碰到过不少,咱们一步步来排查解决:
排查与解决步骤
1. 先确认数据库服务器的网络可达性
首先得验证你的Laravel应用所在服务器,能不能正常连接到数据库工作站:
- 先ping数据库工作站的IP(就是你
.env里的DB_HOST值):
ping ipaddress
如果ping不通,说明是网络层面的问题——要么数据库工作站重启后IP变了,要么防火墙拦截了请求,要么工作站本身没完全启动完成。
- 要是ping得通,再用telnet测试3306端口是否开放:
telnet ipaddress 3306
连不上的话,大概率是MySQL服务没启动,或者数据库的绑定地址被限制了,或者工作站防火墙封了3306端口。
2. 检查MySQL服务状态
登录到数据库工作站,确认MySQL服务是否正常运行:
- 对于systemd系统(Ubuntu 16.04+/CentOS 7+):
sudo systemctl status mysql
- 老版本系统用service命令:
sudo service mysql status
如果服务未启动,先启动它:
sudo systemctl start mysql # 或者 sudo service mysql start
为了避免下次重启再出问题,可以设置开机自启:
sudo systemctl enable mysql
3. 验证MySQL用户的连接权限
有时候数据库重启后,用户的连接权限可能出现异常。登录到MySQL控制台,检查你的user账号是否允许从应用服务器IP连接:
SELECT user, host FROM mysql.user WHERE user = 'user';
如果结果里的host是localhost或者非应用服务器的IP,需要重新授权:
-- 允许从应用服务器IP连接 GRANT ALL PRIVILEGES ON ssweb.* TO 'user'@'应用服务器IP' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
测试环境下可以临时允许所有IP连接(生产环境不建议这么做):
GRANT ALL PRIVILEGES ON ssweb.* TO 'user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
4. 检查MySQL的绑定地址配置
打开MySQL的配置文件(通常是/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),找到bind-address配置项:
bind-address = 127.0.0.1
如果是这个值,MySQL只允许本地连接,需要改成数据库工作站的对外IP或者0.0.0.0(允许所有IP访问),修改后重启MySQL服务:
sudo systemctl restart mysql
5. 清理Laravel配置缓存
Laravel可能会缓存旧的配置信息,哪怕你修正了.env也不会生效,执行以下命令清理缓存:
php artisan config:clear php artisan cache:clear
如果你的服务器启用了OPcache,建议同时重启PHP服务。
最后核对.env配置
再仔细检查一遍.env里的参数:
DB_HOST是否是数据库工作站的正确IPDB_PORT是否为3306(MySQL默认端口)DB_DATABASE、DB_USERNAME、DB_PASSWORD是否和数据库的实际信息完全一致,注意不要有多余空格或拼写错误
内容的提问来源于stack exchange,提问作者user9461267
相关产品推荐
相关产品推荐

