Python连接远程MySQL报错:Can't connect to MySQL server on 'localhost:3306'(10061)
排查远程MySQL连接失败(2003错误)的常见问题
你遇到的2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)错误,核心是TCP连接无法建立,即使添加了远程IP白名单,还有以下几个关键排查点:
1. 修正host参数,不要用网站域名或留空
很多托管商的MySQL服务器地址和网站域名不是同一个,你填网站域名或者留空host,驱动会默认尝试连接localhost,这就是报错里显示localhost:3306的原因。
- 去虚拟主机控制面板找到专属的MySQL数据库主机地址(通常类似
db.yourhost.com、mysql123.hostingprovider.net或内部IP),把这个地址填到host参数里,不要留空。
2. 确认MySQL端口是否非默认3306
部分托管商会修改MySQL默认端口,若你的托管商使用了其他端口,需要在连接参数中明确指定:
import mysql.connector try: db = mysql.connector.connect( host="正确的数据库主机地址", port=3307, # 替换为托管商提供的端口号 user="你的数据库用户名", password="你的数据库密码", database="你的数据库名" ) print("Connection successful!") except mysql.connector.Error as err: print(f"Error: {err}")
3. 验证本地网络能否访问数据库端口
用命令行工具测试网络连通性:
- 执行
telnet 数据库主机地址 端口号,如果提示无法连接,说明:- 本地防火墙(Windows防火墙、杀毒软件)拦截了出站请求,需要添加MySQL端口的放行规则;
- 托管商的服务器防火墙未开放对应端口,联系托管商确认。
4. 确认MySQL用户的远程访问权限
即使添加了IP到远程主机列表,部分托管商的MySQL用户默认仅允许服务器内部访问,需要确认用户权限是你的用户名@你的本地IP或者你的用户名@%(允许所有远程IP)。可以通过虚拟主机的数据库管理工具(如phpMyAdmin)查看权限,或直接联系托管商核实。
5. 检查是否需要强制SSL连接
部分托管商要求远程MySQL连接必须使用SSL,此时需在连接参数中启用SSL:
db = mysql.connector.connect( host="正确的数据库主机地址", user="你的数据库用户名", password="你的数据库密码", database="你的数据库名", ssl_disabled=False # 启用SSL )
内容的提问来源于stack exchange,提问作者tasos
相关产品推荐
相关产品推荐

