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

Python连接Ubuntu VPS上MySQL报错2003,目标主机主动拒绝连接

解决pymysql连接Ubuntu VPS MySQL时的连接拒绝问题

我来帮你一步步排查这个连接被拒绝的问题——你遇到的pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'remotehost' ([WinError 10061] No connection could be made because the target machine actively refused it)"),通常是几个常见配置问题导致的,咱们逐个解决:

1. 检查MySQL是否允许远程连接

Ubuntu上的MySQL默认只允许本地访问,需要修改配置放开远程连接:

  • 登录你的VPS,打开MySQL配置文件:
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    
  • 找到bind-address这一行,把默认的127.0.0.1改成0.0.0.0(允许所有IP访问)
  • 保存后重启MySQL服务:
    sudo systemctl restart mysql
    

2. 确认VPS防火墙开放了3306端口

Ubuntu默认使用UFW防火墙,需要确保3306端口对外开放:

  • 检查当前防火墙状态:
    sudo ufw status
    
  • 如果看不到3306/tcp的允许规则,添加规则:
    sudo ufw allow 3306/tcp
    sudo ufw reload
    

3. 验证用户权限是否真正生效

虽然你说设置了“Any host”,但还是要确认权限是否正确配置:

  • 登录VPS上的MySQL:
    mysql -u 你的用户名 -p
    
  • 执行以下命令查看用户的主机权限:
    SELECT user, host FROM mysql.user WHERE user='你的用户名';
    
  • 如果结果里的host不是%(代表任意主机),重新授权:
    GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码';
    FLUSH PRIVILEGES;
    

4. 修正代码中的参数错误

你的代码里有个小问题:port参数应该是整数,而不是字符串,同时要确保host是VPS的公网IP(不是占位符remotehost)。修正后的代码如下:

import pymysql

# 替换成你的实际信息
conn = pymysql.connect(
    host='你的VPS公网IP地址',
    port=3306,  # 这里是整数,不要加引号
    user='你的MySQL用户名',
    password='你的MySQL密码',
    db='你的数据库名'
)

try:
    cursor = conn.cursor()
    sql = 'SELECT * from `users`;'
    row_count = cursor.execute(sql)
    print("Number of rows :", row_count)
    data = cursor.fetchone()
    print(data)
finally:
    # 记得关闭连接,避免资源泄漏
    conn.close()

按照以上步骤排查后,应该就能成功连接到VPS上的MySQL了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:54:11