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

mysql.connector使用SSL连接MySQL报错但pymysql可正常连接问题排查

问题原因及解决方案

pymysql可正常连接证明证书有效性、服务端SSL配置、网络连通性均无问题,故障由mysql.connector与pymysql的SSL默认处理逻辑差异导致,常见原因及解决方法如下:

  • TLS版本协商不匹配
    mysql.connector 8.0及以上版本默认禁用TLS 1.0、TLS 1.1,仅允许TLS 1.2及以上版本建立连接,若你的MySQL服务端仅支持低版本TLS协议,就会出现SSL握手失败。而pymysql默认支持的TLS协议范围更广,不会触发该问题。
    解决方法:在配置中指定兼容的TLS版本,示例:
import ssl
config = {
    'user': 'ssl-username',
    'password': 'password',
    'host': '4.1.3.2',
    'ssl_ca': '/path/to/ca.pem',
    'ssl_cert': '/path/to/cert.pem',
    'ssl_key': '/path/to/key.pem',
    # 按需指定TLS版本,可选ssl.PROTOCOL_TLSv1 / ssl.PROTOCOL_TLSv1_1 / ssl.PROTOCOL_TLSv1_2
    'ssl_version': ssl.PROTOCOL_TLSv1_2
}
  • SSL主机名校验失败
    mysql.connector默认开启SSL证书主机名校验,要求证书的CN/SAN字段与连接使用的host值完全匹配,而pymysql默认不开启该校验。如果你使用IP地址连接、且证书未绑定对应IP,就会触发握手失败。
    解决方法:在配置中关闭主机名校验:
config['ssl_check_hostname'] = False

如果不需要校验证书有效性(不推荐生产环境使用),可额外添加'ssl_verify_cert': False参数。

  • mysql.connector版本存在SSL处理缺陷
    部分mysql.connector版本(如8.0.23、8.0.30等)存在已知的SSL参数处理bug,即使配置正确也会出现握手失败。
    解决方法:更换为稳定版本,可尝试升级到最新版,或降级到8.0.28、8.0.33等经过验证的稳定版本,使用pip命令调整版本:
pip install mysql-connector-python==8.0.33
  • 手动指定client_flags导致协商冲突
    当配置中已传入ssl_ca等SSL相关参数时,mysql.connector会自动启用SSL连接,无需手动添加client_flags=[ClientFlag.SSL],手动指定该参数可能会导致与服务端的能力协商冲突,触发连接失败,直接删除该参数即可。

最终可用连接示例

import mysql.connector
import ssl

config = {
    'user': 'ssl-username',
    'password': 'password',
    'host': '4.1.3.2',
    'ssl_ca': '/path/to/ca.pem',
    'ssl_cert': '/path/to/cert.pem',
    'ssl_key': '/path/to/key.pem',
    'ssl_version': ssl.PROTOCOL_TLSv1_2,
    'ssl_check_hostname': False
}

conn = mysql.connector.connect(**config)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:45:00