Python连接Azure MySQL服务器失败报SSL WRONG_VERSION_NUMBER错误求助
根因说明
报错[SSL: WRONG_VERSION_NUMBER]是Python MySQL连接器默认优先发起SSL握手请求,而Azure MySQL 5.7支持的SSL/TLS版本与当前连接器默认要求的版本不匹配导致的。MySQL Workbench、Node客户端在SSL握手失败后会自动回退到非SSL连接,因此相同参数可以正常连接;GCP MySQL 8.0默认支持的TLS版本和当前连接器适配,所以连接正常。
解决方案
- 方案1:显式禁用SSL连接
你的数据库用户未配置强制SSL验证,直接在连接配置中添加禁用SSL的参数即可,修改后配置如下(以mysql-connector-python为例):
config = { 'host':'local.mysql.database.azure.com', 'user':'user@local', 'password':'password', 'database':'random_db', 'ssl_disabled': True }
如果使用的是pymysql,则添加'ssl': None参数即可。
- 方案2:配置SSL证书连接
如果后续需要开启SSL验证,可从Azure门户下载对应实例的SSL根证书,在配置中指定本地证书路径:
config = { 'host':'local.mysql.database.azure.com', 'user':'user@local', 'password':'password', 'database':'random_db', 'ssl_ca': '/path/to/your/azure/mysql/ca.pem' }
- 方案3:更换或降级连接模块
目前主流的Python MySQL连接模块有两类,可交叉尝试适配:- Oracle官方出品的
mysql-connector-python - 纯Python实现的
pymysql
如果更换模块后仍报错,可降级连接器版本提升兼容性: mysql-connector-python降级到8.0.23及以下版本pymysql降级到1.0.2及以下版本
- Oracle官方出品的
内容的提问来源于stack exchange,提问作者daniel ajj
相关产品推荐
相关产品推荐

