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

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

火山引擎 最新活动