You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

跨网络通过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

火山引擎 最新活动