跨网络通过Python连接XAMPP MySQL失败求助:报错2003无法连接服务器
解决跨网络连接XAMPP MySQL的10060连接超时问题
我太懂你这种摸不着头脑的感觉了——IP对、端口对、本地连接完全正常,跨网络就连不上还报10060超时。结合你的场景和已经做的排查,咱们按优先级一步步搞定这个问题:
1. 先搞定MySQL的远程访问权限(最容易踩的坑)
XAMPP自带的MySQL默认是只允许本地(127.0.0.1)访问的,这是远程连接失败的头号原因,你需要给你的coinchaser用户开远程权限:
- 打开XAMPP控制面板,点MySQL的「Shell」按钮,进入命令行。
- 登录MySQL:输入
mysql -u root -p,如果root没密码直接回车就行。 - 执行授权命令:
这里的GRANT ALL PRIVILEGES ON coinchaser.* TO 'coinchaser'@'%' IDENTIFIED BY 'Coinchaser2021';%表示允许任何IP连接,要是想更安全,可以把%换成你PC所在网络B的公网/局域网IP。 - 刷新权限让配置生效:
FLUSH PRIVILEGES; - 输入
EXIT;退出MySQL。
2. 修改MySQL的绑定地址,让它对外可见
默认MySQL只绑定了本地回环地址,得改成允许外部访问:
- 找到XAMPP安装目录里的
mysql\bin\my.ini(Windows)或者my.cnf(Linux/Mac)。 - 搜索
bind-address,把它的值改成0.0.0.0(允许所有IP访问),或者服务器的实际公网/局域网IP。 - 重启XAMPP的MySQL服务,新配置才会生效。
3. 再仔细核对防火墙与端口转发(别漏了路由器层面)
你说已经开放了3306端口,但要确认这几点:
- 服务器本地防火墙(比如Windows防火墙、Linux的iptables)的规则,是允许外部网络访问3306端口,而不是只允许本地。可以临时关闭防火墙测试一下,如果能连上,就是防火墙规则的问题。
- 如果服务器在路由器后面(比如家庭网络里的XAMPP),必须在路由器后台做端口转发——把外部请求的3306端口,转发到服务器的内网IP的3306端口。这一步90%的新手都会忘!
- 可以在你的PC上用
telnet xxx.xxx.xxx.xxx 3306测试端口是否能打通,如果telnet连不上,说明端口还是没对外开放。
4. 给你的Python代码加一点小优化
你的代码逻辑没问题,但可以加几个参数让排查更清晰:
- 显式指定端口号(虽然你说3306没问题,但加上更稳妥):
config = { 'host':'xxx.xxx.xxx.xxx', 'port':3306, # 新增这一行 'user':'coinchaser', 'password':'Coinchaser2021', 'database':'coinchaser' } - 增加连接超时参数,避免默认超时时间太短:
conn = mysql.connector.connect(**config, connection_timeout=30)
按照这个顺序排查,基本上能解决跨网络连接XAMPP MySQL的超时问题。
内容的提问来源于stack exchange,提问作者chraebsli




