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依赖兼容问题
该方案不需要改动原有业务的数据库操作逻辑,仅需替换驱动层:- 先安装Python2.7兼容的最后一个PyMySQL版本:
pip2 install pymysql==0.10.1 - 在项目入口文件的最顶部添加如下代码,将PyMySQL伪装为MySQLdb:
import pymysql pymysql.install_as_MySQLdb()
原有代码中所有
import MySQLdb的逻辑无需任何修改即可正常运行,纯Python实现的SSL协商逻辑不会触发系统C库的版本兼容问题。- 先安装Python2.7兼容的最后一个PyMySQL版本:
提示:Python2.7早已停止官方维护,上述方案仅为旧站过渡阶段的临时修复手段,需尽快推进新版站点的开发与迁移。
内容的提问来源于stack exchange,提问作者Lilith-Elina

