Python连接远程主机MySQL数据库超时问题求助
解决MySQL远程连接超时及账号疑问
首先明确你的核心疑问:必须使用你在PHPMyAdmin中创建的数据库账号密码(也就是turboweb_jobsuser和对应的密码),绝对不能用cPanel的账号密码——cPanel是主机管理面板的登录凭据,和数据库用户是完全独立的两套体系,这点你之前的选择是对的。
接下来重点解决连接超时的问题,这个错误(2003, "Can't connect to MySQL server on '195.201.204.153' (timed out)")通常是远程访问权限或网络配置问题导致的,按以下步骤排查:
1. 开启数据库用户的远程访问权限
绝大多数主机默认只允许localhost(服务器本地)访问MySQL数据库,你需要给turboweb_jobsuser开启远程访问权限:
- 登录cPanel,找到
MySQL Databases模块,进入后找到Remote MySQL选项 - 在输入框中添加你本地机器的公网IP(或者输入
%允许所有IP访问,不过后者安全性稍低,建议用具体IP) - 或者在PHPMyAdmin中,进入
用户账户页面,找到turboweb_jobsuser,点击编辑权限,将主机字段从localhost修改为你的公网IP或%,保存设置
2. 核实数据库的实际主机地址
你ping网站得到的IP是网站服务器的地址,但很多主机的数据库服务器和网站服务器是分开的,也就是说数据库可能不在这个IP上。你可以:
- 登录cPanel的
MySQL Databases页面,查看数据库的主机信息(通常会显示类似localhost或者专门的数据库服务器地址,比如db.yourhost.com) - 如果是
localhost,那说明数据库和网站在同一服务器,但此时远程连接需要主机开启3306端口的外部访问;如果是其他地址,就把这个地址替换到代码的host参数中
3. 检查MySQL端口配置
默认MySQL端口是3306,但有些主机为了安全会修改端口号。你可以:
- 在cPanel的数据库设置中找到实际的端口号
- 在代码中添加
port参数,比如port=3306(替换成实际端口)
4. 排查防火墙限制
- 本地防火墙:检查你电脑的防火墙(Windows Defender防火墙、Mac防火墙等)是否阻止了3306端口的出站请求,需要添加允许规则
- 主机防火墙:部分主机会有自带的防火墙,需要确认3306端口已经对你的IP开放(可以联系主机商确认)
修改后的代码示例
添加端口和字符集参数(避免编码问题),替换正确的主机地址:
import pymysql.cursors import pymysql try: connection = pymysql.connect( host='数据库实际主机地址', user='turboweb_jobsuser', password='TYcfvA*****', db='turboweb_jobsdb_user', port=3306, # 替换为主机实际的MySQL端口 charset='utf8mb4' ) print("Connected to:", connection.get_server_info()) except Exception as e: print('connection failed') print(e)
如果以上步骤都试过还是不行,建议联系你的主机服务商,确认他们是否允许远程MySQL连接,以及是否有额外的限制(比如需要使用SSL连接)。
内容的提问来源于stack exchange,提问作者Sainita




