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

Linode部署的Django项目无法连接家用MySQL服务器如何解决?

解决Linode服务器连接家用MySQL数据库的问题

错误2003, "Can't connect to MySQL server on 'personal server ip address':3306' (110)"属于连接超时,说明请求未正常到达家用MySQL服务器或无返回,按以下步骤逐一排查:

1. 修正MySQL绑定地址

MySQL默认仅监听本地127.0.0.1,需修改配置允许公网访问:

  • 编辑Ubuntu上的MySQL配置文件:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  • 找到bind-address行,改为家用服务器的公网IP或0.0.0.0(允许所有IP访问,后续靠防火墙和权限控制)
  • 重启MySQL服务:sudo systemctl restart mysql

2. 确认家用服务器公网IP正确性

  • 在家用服务器执行curl ifconfig.me获取当前公网IP,核对Django settings.py中配置的IP是否一致(家用宽带多为动态IP,频繁变动建议配置DDNS)
  • 在Linode服务器执行ping 家用公网IP,若ping不通,优先排查网络链路问题

3. 验证UFW规则有效性

  • 在家用服务器执行sudo ufw status verbose,检查是否存在允许Linode IP访问3306端口的规则,格式应为:ALLOW Linode_IP/32 3306/tcp
  • 若规则错误,重新添加并重载:
    sudo ufw allow from Linode_IP to any port 3306 proto tcp
    sudo ufw reload
    

4. 配置家用路由器端口转发

家用服务器通常处于路由器内网,需设置端口转发将公网3306请求指向服务器内网IP:

  • 登录路由器管理后台,添加TCP协议转发规则:外部端口3306、内部端口3306、目标IP为家用服务器的内网IP(如192.168.1.100)

5. 测试Linode到家用3306端口的连通性

  • 在Linode上用telnet测试:telnet 家用公网IP 3306,若显示Connected to xxx则网络连通;若超时,回到前面步骤排查
  • 或用nc命令:nc -zv 家用公网IP 3306查看连接状态

6. 确认MySQL用户权限设置

  • 登录家用MySQL,执行SELECT user, host FROM mysql.user;,确认授权给Linode IP的用户存在,host字段为Linode的IP(不建议用%通配,优先限制特定IP)
  • 若权限配置错误,重新授权并刷新权限:
    GRANT ALL PRIVILEGES ON 你的Django数据库名.* TO '数据库用户名'@'Linode_IP' IDENTIFIED BY '密码';
    FLUSH PRIVILEGES;
    

7. 排查运营商端口屏蔽问题

部分运营商会屏蔽3306这类常用端口,可临时修改MySQL端口规避:

  • 修改MySQL配置文件中的port参数为不常用端口(如33070),重启MySQL
  • 同步更新UFW规则、路由器转发端口和Django settings.py中的数据库端口配置

若以上步骤均无效,检查家用服务器是否启用其他防火墙(如iptables),或Linode服务器是否有出站规则限制3306端口。

内容的提问来源于stack exchange,提问作者nick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:03:21