Flask连接本地MySQL遇2055错误:SSL版本号异常求助
解决Flask对接本地MySQL时的2055连接断开(SSL版本错误)问题
核心问题定位
报错中的[SSL: WRONG_VERSION_NUMBER]是关键诱因——你的Python MySQL客户端尝试通过SSL连接本地MySQL,但两者的SSL配置不匹配,或是本地MySQL未启用SSL,客户端却强制发起SSL连接请求。
针对性解决方案
1. 直接禁用SSL连接
在数据库连接配置中明确关闭SSL,根据你使用的MySQL客户端库调整参数:
- 若使用
pymysql:
import pymysql conn = pymysql.connect( host='localhost', user='你的用户名', password='你的密码', db='目标数据库', port=3306, ssl_mode='DISABLED' # 核心参数:禁用SSL )
- 若使用
mysql-connector-python:
import mysql.connector conn = mysql.connector.connect( host='localhost', user='你的用户名', password='你的密码', database='目标数据库', ssl_disabled=True # 核心参数:禁用SSL )
2. 检查本地MySQL的SSL状态
登录本地MySQL终端,执行命令确认SSL配置:
SHOW VARIABLES LIKE '%ssl%';
- 若
have_ssl值为NO:说明本地MySQL未启用SSL,直接用上面的禁用SSL方案即可解决。 - 若
have_ssl值为YES:查看MySQL支持的SSL协议版本,再让客户端匹配:
SHOW VARIABLES LIKE 'tls_version';
然后在Python连接时指定对应协议(以pymysql为例):
conn = pymysql.connect( # 其他连接参数 ssl={'tls_version': 'TLSv1.2'} # 替换为MySQL实际支持的版本 )
3. 优化连接管理(减少频繁创建/销毁连接)
虽然你在__exit__中关闭了连接,但频繁创建连接也可能触发异常,建议改用连接池:
- 使用Flask常用的SQLAlchemy连接池:
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 连接字符串中加入SSL禁用参数,同时配置连接池 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://用户名:密码@localhost/数据库名?ssl_mode=DISABLED' app.config['SQLALCHEMY_POOL_SIZE'] = 5 # 连接池常驻连接数 app.config['SQLALCHEMY_POOL_RECYCLE'] = 3600 # 自动回收闲置连接的时间(秒) db = SQLAlchemy(app)
连接池会复用现有连接,避免频繁断开重连的损耗。
4. 调整MySQL的超时参数
本地MySQL的wait_timeout和interactive_timeout设置过短,会自动断开闲置连接。登录MySQL修改:
SET GLOBAL wait_timeout = 28800; SET GLOBAL interactive_timeout = 28800;
如需永久生效,在my.cnf(Windows为my.ini)中添加:
[mysqld] wait_timeout = 28800 interactive_timeout = 28800
验证步骤
- 优先尝试禁用SSL连接,确认是否还出现2055错误;
- 若问题解决,再根据业务需求调整连接池或MySQL超时参数;
- 若禁用SSL无效,再排查SSL版本匹配问题。
内容的提问来源于stack exchange,提问作者LiveaLearn
相关产品推荐
相关产品推荐

