使用mysql.connector连接MySQL报错2003,寻求解决办法
问题分析与解决方案
错误核心原因
你遇到的2003: Can't connect to MySQL server on 'host.id:3306' (-2 Name or service not known)错误包含两个关键问题:
- 代码里定义了
port = 1234,但调用msql.connect()时未传入port参数,导致驱动默认使用MySQL的默认端口3306发起连接,和目标端口不匹配 - 系统无法解析
host.id主机名,或该主机的目标端口无法被当前机器访问
分步解决方法
1. 修正连接代码,传入所有必要参数
把定义好的port和database参数加入connect()调用,确保连接到正确的端口和数据库:
import mysql.connector as msql from mysql.connector import Error user = 'user' passw = 'pass' host = 'host.id' port = 1234 database = 'db-dev' try: # 补充port和database参数 conn = msql.connect( host=host, user=user, password=passw, port=port, database=database ) if conn.is_connected(): cursor = conn.cursor() print("连接成功") except Error as e: print("Error while connecting to MySQL", e)
2. 验证主机名解析
在Python运行环境所在机器上,执行以下命令测试host.id能否正常解析:
nslookup host.id # 或用ping测试连通性 ping host.id
如果返回“未知名称或服务”,需:
- 检查
host.id拼写是否正确 - 确认当前机器能访问该主机所在网络(如是否在同一内网、是否需要VPN)
- 若为自定义主机名,需在本地
hosts文件中添加IP与主机名的映射
3. 检查MySQL服务器网络配置
- 确认MySQL配置文件(通常为
my.cnf或my.ini)中,bind-address设置为允许当前机器访问的IP(如0.0.0.0允许所有IP,或当前机器的具体IP),而非仅本地的127.0.0.1 - 确认MySQL服务器的系统防火墙、云服务商安全组已开放
1234端口,允许当前机器IP访问
4. 验证端口连通性
用telnet或nc命令测试目标主机的1234端口是否可达:
# telnet方式 telnet host.id 1234 # nc方式 nc -zv host.id 1234
若连接失败,说明网络层面存在阻断,需排查防火墙或路由设置
5. 确认MySQL用户权限
确保使用的user账号拥有从当前机器IP连接的权限。在MySQL服务器上执行以下SQL查询:
SELECT user, host FROM mysql.user WHERE user = 'user';
若查询结果中host列是localhost或特定IP,而非%(允许所有IP)或当前机器IP,需更新权限:
GRANT ALL PRIVILEGES ON `db-dev`.* TO 'user'@'你的机器IP' IDENTIFIED BY 'pass'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者biyazelnut
相关产品推荐
相关产品推荐

