Laravel 9部署至虚拟主机后无法连接公网IP MySQL的问题咨询
Laravel 9部署后无法连接远程MySQL的排查与解决
错误原因解析
SQLSTATE[HY000] [2002] (110) 是网络连接超时,说明虚拟主机服务器无法通过公网IP访问到你的本地MySQL服务。本地笔记本能正常连接,问题出在网络链路权限或MySQL配置限制上。
逐一排查与解决步骤
1. 检查本地MySQL的网络可达性
- 端口转发配置:登录路由器后台,确认已将3306端口(或自定义非标准端口,如33060,部分运营商会屏蔽3306)映射到运行MySQL的本地服务器内网IP(如192.168.1.100)。
- 本地防火墙规则:
- Linux服务器:执行
ufw allow from 虚拟主机IP to any port 3306开放指定IP的入站访问;测试阶段可临时执行ufw allow 3306全放开验证。 - Windows服务器:在Windows防火墙“高级设置”中添加入站规则,允许3306端口的TCP连接。
- Linux服务器:执行
- 公网端口验证:用本地笔记本访问端口检测工具,输入3306端口确认公网可访问。
2. 修正MySQL的绑定地址与用户权限
- 修改绑定地址:
打开MySQL配置文件(Linux为/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf,Windows为my.ini),将bind-address改为0.0.0.0(允许所有IP访问)或直接指定虚拟主机公网IP。修改后重启服务:# Linux systemctl restart mysql # Windows net stop mysql && net start mysql - 配置远程访问权限:
登录MySQL控制台,为数据库账号授权虚拟主机IP的访问权限:
测试阶段可临时用GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'虚拟主机公网IP' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;%允许所有IP访问(不推荐长期使用):GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;
3. 排查虚拟主机的网络限制
- 测试连通性:
在虚拟主机终端(或SSH)执行以下命令,验证能否连接到本地MySQL端口:
如果返回连接拒绝或超时,说明虚拟主机服务商可能禁止了3306端口的出站访问,需联系服务商确认权限。telnet 你的公网IP 3306 # 或用nc命令 nc -zv 你的公网IP 3306 - 共享IP排查:部分虚拟主机使用共享IP,可能存在IP被本地防火墙拉黑的情况,可临时关闭本地防火墙测试。
4. 清理Laravel配置缓存
虚拟主机上的Laravel可能加载了旧配置缓存,执行以下命令清除:
php artisan config:clear php artisan cache:clear php artisan route:clear
同时确认.env文件中的DB_HOST、DB_PORT、DB_USERNAME、DB_PASSWORD配置无拼写错误。
安全提示
- 问题解决后,立即将MySQL的
bind-address改回限制IP,或把用户权限缩小到仅允许虚拟主机IP访问,避免安全风险。 - 长期远程连接建议使用VPN、SSH隧道等加密方式,替代直接开放公网端口。
内容的提问来源于stack exchange,提问作者Maruli Hasurungan
相关产品推荐
相关产品推荐

