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

Python脚本通过SSH连接PythonAnywhere MySQL 8时无限挂起求助

解决Python脚本连接PythonAnywhere MySQL 8时无限挂起的问题

可能的原因及对应解决方案

1. 强制MySQL连接使用TCP协议

mysql-connector默认优先尝试Unix套接字连接,但SSH隧道是基于TCP转发的,需显式指定使用TCP:
修改数据库配置,将host设为127.0.0.1(避免localhost触发套接字优先逻辑),同时禁用套接字:

db_config = {
    'user': '你的用户名',
    'password': '你的密码',
    'host': '127.0.0.1',
    'database': '目标数据库名',
    'port': 本地转发端口,
    'unix_socket': None
}

2. 添加连接超时参数

连接阶段可能因超时设置不合理导致挂起,添加超时参数强制中断并返回错误,便于排查:

db_config = {
    # 其他配置项...
    'connection_timeout': 10,
    'connect_timeout': 10
}

3. 调整SSH隧道端口绑定IP

部分SSH库默认将端口转发绑定到localhost,若本地环境有特殊网络配置,可临时改为绑定0.0.0.0测试(生产环境不推荐):
以paramiko为例,修改端口转发代码:

# 原代码
ssh_client.get_transport().open_channel('direct-tcpip', (远程MySQL主机, 远程MySQL端口), ('localhost', 本地端口))
# 修改后
ssh_client.get_transport().open_channel('direct-tcpip', (远程MySQL主机, 远程MySQL端口), ('0.0.0.0', 本地端口))

4. 替换MySQL客户端库

mysql-connector可能存在兼容性问题,换成pymysql尝试:
先安装依赖:pip install pymysql
修改连接代码:

import pymysql

conn = pymysql.connect(**db_config)

5. 检查本地防火墙/安全软件

本地防火墙或安全软件可能拦截了127.0.0.1上的转发端口,临时关闭防火墙或添加出站规则允许该端口的TCP连接。

6. 启用调试日志定位问题

开启mysql-connector的调试日志,查看连接过程的具体挂起点:

import logging
logging.basicConfig(level=logging.DEBUG)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:06:01