MySQL Python Connector报错:wrap_socket()收到意外参数'ciphers'求助
解决Python 2.6.6连接MySQL时的
wrap_socket()参数错误 我之前维护老项目时碰到过一模一样的版本组合坑,给你详细说下问题出在哪以及怎么解决:
问题根源
你遇到的TypeError: wrap_socket() got an unexpected keyword argument 'ciphers',核心原因是版本兼容性不匹配:
- Python 2.6.6的标准库
ssl模块里,wrap_socket()方法根本没有ciphers这个参数; - 而你用的
mysql-connector-python-2.1.7,在处理SSL相关逻辑时,不管服务器是否禁用SSL,内部代码依然会尝试传递ciphers参数给ssl.wrap_socket(),直接触发了这个错误。
可行解决方案
1. 降级mysql-connector-python到兼容版本
这是最稳妥的方案,因为mysql-connector-python 2.1.x系列已经不再对Python 2.6提供完整支持了。你可以降级到2.0.x系列的稳定版本,比如2.0.4:
pip install mysql-connector-python==2.0.4
这个版本的连接器会适配Python 2.6的ssl模块,即使服务器禁用SSL,也不会传递不支持的ciphers参数。
2. 手动修改连接器源码(应急临时方案)
如果暂时不能降级版本,可以尝试修改连接器的源码来绕过这个问题:
- 找到你的Python环境中mysql连接器的安装路径,比如
site-packages/mysql/connector; - 打开处理SSL的相关文件(比如
connection.py或者ssl.py),找到调用ssl.wrap_socket()的代码行; - 把行里的
ciphers=xxx参数去掉,比如将:
修改为:ssl.wrap_socket(sock, ciphers=self._ssl_cipher)ssl.wrap_socket(sock)
⚠️ 注意:这种方法只是临时应急,后续升级连接器会覆盖修改,不推荐长期使用。
3. 明确在连接配置中禁用SSL
确保你的Python连接代码里明确指定ssl_disabled=True,比如:
import mysql.connector config = { 'user': 'your_user', 'password': 'your_password', 'host': 'your_host', 'database': 'your_db', 'ssl_disabled': True } cnx = mysql.connector.connect(**config)
虽然服务器已经设置了ssl_disabled,但客户端明确指定这个参数,能让连接器跳过更多不必要的SSL初始化逻辑,减少触发错误的可能。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

