将Laravel网站从本地部署到生产服务器时遇SQL连接拒绝错误
Laravel部署生产服务器:SQLSTATE[HY000] [2002] Connection refused 解决办法
这个错误是Laravel无法连接到生产环境数据库导致的,以下是针对性排查和解决步骤:
核对.env数据库配置
确保生产环境.env配置与本地环境完全区分:DB_HOST:优先填127.0.0.1而非localhost(避免套接字连接异常),远程数据库则填对应IPDB_PORT:默认3306,需与数据库服务实际监听端口一致DB_USERNAME、DB_PASSWORD:使用生产环境专属的数据库账号密码,不要复用本地配置- 修改后执行
php artisan config:cache清除配置缓存,确保Laravel加载最新配置
确认数据库服务运行状态
登录生产服务器,检查MySQL/MariaDB服务是否正常运行:systemctl status mysql若服务未启动,执行启动并设置开机自启:
systemctl start mysql systemctl enable mysql检查数据库用户权限
确保生产数据库用户允许从当前服务器IP连接:- 登录数据库控制台:
mysql -u root -p - 执行授权命令(替换占位符为实际信息):
GRANT ALL ON your_database_name.* TO 'your_db_user'@'your_server_ip' IDENTIFIED BY 'your_db_password'; FLUSH PRIVILEGES;
本地数据库可将
your_server_ip替换为localhost或127.0.0.1- 登录数据库控制台:
排查防火墙限制
- 生产服务器开放3306端口:
Ubuntu系统:
CentOS/RHEL系统:ufw allow 3306 ufw reloadfirewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload - 远程数据库需额外确认数据库服务器防火墙允许当前生产服务器IP访问3306端口
- 生产服务器开放3306端口:
检查本地套接字配置(可选)
若DB_HOST设为localhost且用套接字连接:- 确认
.env中DB_SOCKET路径正确,比如DB_SOCKET=/var/run/mysqld/mysqld.sock - 通过
ls -l /var/run/mysqld/mysqld.sock检查套接字文件是否存在、权限是否正常
- 确认
内容的提问来源于stack exchange,提问作者MIRZA AHMER Ahmiiii
相关产品推荐
相关产品推荐

