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

使用mysql-connector-python连接MySQL5数据库遇握手失败问题求助

解决mysql.connector的1043 (08S01): Bad handshake错误

针对你遇到的握手失败错误,结合你的Python3.11 + mysql-connector-python 8.0.31环境,按以下步骤排查解决:

1. 强制指定认证插件(优先尝试)

如果你的MySQL服务器是5.x版本,默认用mysql_native_password认证插件,而8.x版本的连接器默认优先使用caching_sha2_password,这是握手失败的常见原因。修改连接代码,强制指定认证插件:

import pandas as pd
import mysql.connector

database = 'db'
host = 'host'
port = '3306'
user = 'user'
password = 'pass'
con = mysql.connector.connect(
    user=user,  
    password=password,
    host=host,
    database=database,
    ssl_disabled=True,
    auth_plugin='mysql_native_password'  # 新增该行
)

2. 对齐连接器与服务器版本

你的环境中mysql-libs是8.0.32,但连接器是8.0.31,版本差虽小但可能引发兼容性问题,尝试升级或降级连接器版本:

  • 升级到与mysql-libs同版本:
    conda install mysql-connector-python=8.0.32 --force-reinstall
    
  • 若服务器是旧版(5.x),降级到兼容性更好的8.0.28版本:
    conda install mysql-connector-python=8.0.28 --force-reinstall
    

3. 排除服务器端问题

先用MySQL命令行客户端测试连接,确认不是服务器配置问题:

mysql -u user -p -h host -P 3306 db

如果命令行也连不上,检查以下几点:

  • 服务器防火墙是否开放3306端口
  • 数据库用户是否拥有当前IP的连接权限(执行GRANT ALL ON db.* TO 'user'@'你的IP' IDENTIFIED BY 'pass'; FLUSH PRIVILEGES;)
  • MySQL配置文件my.cnf是否禁用了远程连接

4. 降级OpenSSL版本

你的环境使用OpenSSL 3.0.8,部分旧版MySQL服务器不支持OpenSSL 3.x协议,尝试降级到1.1.x版本:

conda install openssl=1.1.1t

你的环境配置参考

channels:
  - anaconda
  - defaults
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=2_gnu
  - bzip2=1.0.8=h7f98852_4
  - ca-certificates=2022.12.7=ha878542_0
  - cffi=1.15.1=py311h409f033_3
  - cryptography=39.0.1=py311h9b4c7bb_0
  - dnspython=2.3.0=pyhd8ed1ab_0
  - greenlet=2.0.2=py311hcafe171_0
  - idna=3.3=pyhd3eb1b0_0
  - ld_impl_linux-64=2.39=hc81fddc_0
  - libblas=3.9.0=16_linux64_openblas
  - libcblas=3.9.0=16_linux64_openblas
  - libffi=3.4.2=h7f98852_5
  - libgcc-ng=12.2.0=h65d4601_19
  - libgfortran-ng=11.2.0=h00389a5_1
  - libgfortran5=11.2.0=h1234567_1
  - libgomp=12.2.0=h65d4601_19
  - liblapack=3.9.0=16_linux64_openblas
  - libnsl=2.0.0=h7f98852_0
  - libopenblas=0.3.21=h043d6bf_0
  - libprotobuf=3.21.12=h3eb15da_0
  - libsqlite=3.40.0=h753d276_0
  - libstdcxx-ng=12.2.0=h46fd767_19
  - libuuid=2.32.1=h7f98852_1000
  - libzlib=1.2.13=h166bdaf_4
  - lz4-c=1.9.3=h295c915_1
  - mysql-common=8.0.32=ha901b37_0
  - mysql-connector-python=8.0.31=py311h0cf059c_2
  - mysql-libs=8.0.32=hd7da12d_0
  - ncurses=6.3=h27087fc_1
  - numpy=1.24.2=py311h8e6699e_0
  - openssl=3.0.8=h0b41bf4_0
  - pandas=1.5.3=py311h2872171_0
  - protobuf=4.21.12=py311hcafe171_0
  - pycparser=2.21=pyhd3eb1b0_0
  - python=3.11.0=ha86cf86_0_cpython
  - python-dateutil=2.8.2=pyhd3eb1b0_0
  - python_abi=3.11=3_cp311
  - pytz=2021.3=pyhd3eb1b0_0
  - readline=8.1.2=h0f457ee_0
  - six=1.16.0=pyhd3eb1b0_1
  - sqlalchemy=2.0.2=py311h2582759_0
  - tk=8.6.12=h27826a3_0
  - typing-extensions=4.4.0=hd8ed1ab_0
  - typing_extensions=4.4.0=pyha770c72_0
  - tzdata=2022f=h191b570_0
  - xz=5.2.6=h166bdaf_0
  - zlib=1.2.13=h166bdaf_4
  - zstd=1.5.2=ha4553b6_0
  - pip:
    - pip==22.3.1
    - setuptools==65.5.1
    - wheel==0.38.4

你的连接代码

import pandas as pd
import mysql.connector

database = 'db'
host = 'host'
port = '3306'
user = 'user'
password = 'pass'
con = mysql.connector.connect(user=user,  
                              password=password,
                              host=host,
                              database=database,
                              ssl_disabled=True)

错误信息

mysql.connector.errors.OperationalError: 1043 (08S01): Bad handshake

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:05:24