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

Python远程连接cPanel的MySQL数据库报111连接被拒绝问题

问题核心判断

你遇到的2003: Can't connect to MySQL server (111 Connection refused)不属于账号密码权限错误,是客户端根本没连上服务器的MySQL端口,请求没到MySQL的账号校验环节,不用在密码、库名对错上反复排查。

常见触发原因
  • cPanel(尤其是共享主机版)默认将MySQL服务绑定在本地回环地址127.0.0.1,不监听公网3306端口,所有外部公网请求直接被拒绝
  • cPanel自带防火墙/主机商网络安全组没有放行3306端口的入站请求,或没有将你的本地IP加入访问白名单
  • 连接参数填错:多数cPanel环境的MySQL远程地址不是站点域名,部分主机会将MySQL服务端口改为非3306的其他值;另外cPanel的数据库名、数据库用户名默认带cPanel账号前缀,漏写前缀也会出问题
  • 没有在cPanel后台开启远程数据库访问授权,未将本地IP加入远程访问允许列表
分步解决方法
  1. 先配置cPanel远程访问白名单
    登录cPanel面板找到「远程MySQL」功能入口,将你当前本地网络的公网IP添加到允许访问列表,临时测试可暂时填入%(允许所有IP访问,测试完成后必须删除,避免安全风险),添加后等待3分钟左右让规则生效。
  2. 核对正确的连接参数
    进入cPanel的「MySQL数据库」页面,核对三个关键信息:
    • 完整的数据库名、数据库用户名:必须带上cPanel账号的前缀,比如cPanel账号为miguel,你创建的数据库名为test,实际完整库名是miguel_test
    • 数据库主机地址:不要默认填自己的网站域名,以页面标注的MySQL主机地址为准,部分主机的远程数据库地址为独立的二级域名
    • 端口号:如果页面标注MySQL端口不是默认3306,必须记录下来,连接时显式指定
  3. 验证端口连通性
    本地打开终端执行命令测试端口是否可达:
    telnet 你查到的MySQL主机地址 端口号
    
    • 如果提示连接失败,且你使用的是有root权限的独立服务器/云服务器:修改MySQL配置文件/etc/my.cnf,将bind-address = 127.0.0.1改为bind-address = 0.0.0.0,重启MySQL服务后在防火墙规则中放行对应MySQL端口的入站请求
    • 如果使用的是无root权限的共享cPanel主机:直接联系主机商客服确认是否开放MySQL公网访问权限,多数低价共享主机关闭了公网连库的能力,用户无法自行开启
  4. 修正Python连接代码
    所有参数核对无误后,连接时显式指定端口,参考代码如下:
    import mysql.connector
    
    HOST = "cPanel页面标注的MySQL远程主机地址"
    DATABASE = "带前缀的完整数据库名"
    USER = "带前缀的完整数据库用户名"
    PASSWORD = "数据库用户对应密码"
    PORT = 3306 # 替换为你查到的实际端口
    
    db_connection = mysql.connector.connect(
        host=HOST,
        database=DATABASE,
        user=USER,
        password=PASSWORD,
        port=PORT
    )
    print("Connected to:", db_connection.get_server_info())
    

补充:如果共享主机始终无法开放公网连库权限,可以通过SSH隧道的方式连接本地127.0.0.1的映射端口访问数据库,不需要公网暴露MySQL端口,安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:39:32