使用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
相关产品推荐
相关产品推荐

