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

Ubuntu20.04下Python2.7使用MySQLdb连接报SSL错误如何解决

问题根因

Ubuntu 20.04软件源为Python2.7提供的MySQLdb包,其底层依赖的C客户端库SSL协商逻辑过旧,与远程MySQL服务端的SSL校验规则不匹配,触发(2026, 'SSL connection error: unknown error number')报错。命令行MySQL客户端、Python3环境下的MySQL驱动均使用新版依赖库,因此可正常连接。

可行解决方案

按落地成本从低到高排序:

  • 方案1:显式禁用SSL连接(适用于非强制SSL的内网数据库场景,修复速度最快)
    直接修改数据库连接代码,添加参数关闭SSL:

    import MySQLdb
    
    db = MySQLdb.connect(
        host=Host,
        user=User,
        passwd=Pass,
        db=DBse,
        ssl={"ssl_disabled": True}
    )
    

    *注意:如果远程数据库强制要求SSL连接,该方案无法生效,请选择后续方案。

  • 方案2:固定兼容版本的底层客户端库
    Ubuntu 20.04自带的libmysqlclient21版本存在SSL兼容问题,手动降级到Ubuntu 18.04源中兼容Python2.7 MySQLdb的版本即可:

    sudo apt install libmysqlclient20=5.7.33-0ubuntu0.18.04.1
    sudo apt-mark hold libmysqlclient20
    

    执行完后无需修改原有连接代码,直接运行即可正常连接。apt-mark hold操作会锁定该包版本,避免后续系统升级将其覆盖回不兼容版本。

  • 方案3:替换为纯Python实现的PyMySQL驱动,无底层C依赖兼容问题
    该方案不需要改动原有业务的数据库操作逻辑,仅需替换驱动层:

    1. 先安装Python2.7兼容的最后一个PyMySQL版本:
      pip2 install pymysql==0.10.1
      
    2. 在项目入口文件的最顶部添加如下代码,将PyMySQL伪装为MySQLdb:
      import pymysql
      pymysql.install_as_MySQLdb()
      

    原有代码中所有import MySQLdb的逻辑无需任何修改即可正常运行,纯Python实现的SSL协商逻辑不会触发系统C库的版本兼容问题。

提示:Python2.7早已停止官方维护,上述方案仅为旧站过渡阶段的临时修复手段,需尽快推进新版站点的开发与迁移。

内容的提问来源于stack exchange,提问作者Lilith-Elina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:15:56