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

使用Python连接MySQL数据库遇2003连接拒绝错误求助

解决Python连接MySQL的Connection Refused错误

问题重现

使用SQLAlchemy+pymysql连接MySQL时,无论替换localhost为127.0.0.1,都报错:

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")

连接类代码如下:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

class DbConnectionHandler:
    
    def __init__(self) -> None:
        self.__connection_string = 'mysql+pymysql://root:root@localhost:3306/clean_database'

        self.__engine = self.__create_data_base_engine()
        self.session = None
        
    def __create_data_base_engine(self):
        engine = create_engine(self.__connection_string)
        return engine
    
    def get_engine(self):
        return self.__engine
    
    def __enter__(self):
        session_make = sessionmaker(bind=self.__engine)
        self.session = session_make()
        return self
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.session.close()

排查与解决步骤

  • 确认MySQL服务是否运行
    Linux系统执行:

    systemctl status mysql
    

    若未运行,启动服务:

    systemctl start mysql
    

    Windows系统:打开「服务」面板,找到MySQL服务,确认状态为「正在运行」,未运行则右键启动。

  • 验证MySQL端口监听状态
    检查3306端口是否被MySQL占用:
    Linux执行:

    netstat -tulpn | grep 3306
    

    Windows执行:

    netstat -ano | findstr :3306
    

    若没有输出,说明MySQL未监听3306端口,需修改MySQL配置文件(my.cnf/my.ini)中的port参数为3306,重启服务。

  • 检查用户连接权限
    root用户可能默认仅允许通过本地socket连接,需授权其TCP连接权限:
    登录MySQL客户端后执行:

    GRANT ALL PRIVILEGES ON clean_database.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'root';
    FLUSH PRIVILEGES;
    

    若需要远程连接可替换127.0.0.1为%,但生产环境不建议。

  • 排查防火墙拦截
    临时关闭本地防火墙测试:
    Linux:

    systemctl stop firewalld
    

    Windows:打开「Windows Defender防火墙」,临时关闭或添加3306端口的入站允许规则。

  • 修正连接字符串
    强制使用TCP连接,将连接字符串中的localhost替换为127.0.0.1:

    self.__connection_string = 'mysql+pymysql://root:root@127.0.0.1:3306/clean_database'
    
  • 手动验证连接
    使用MySQL客户端手动测试连接,确认账号、密码、数据库存在:

    mysql -h 127.0.0.1 -P 3306 -u root -p
    

    登录成功后执行SHOW DATABASES;,确认clean_database存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:12:34