You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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连接。
  • 公网端口验证:用本地笔记本访问端口检测工具,输入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端口:
    telnet 你的公网IP 3306
    # 或用nc命令
    nc -zv 你的公网IP 3306
    
    如果返回连接拒绝或超时,说明虚拟主机服务商可能禁止了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:55:27