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
相关产品推荐
相关产品推荐

