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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:20:14