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,核对Djangosettings.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
相关产品推荐
相关产品推荐

