mysql.connector无法本地连接MySQL数据库,但pymysql可以,求问题原因及解决办法
mysql.connector无法本地连接MySQL数据库,但pymysql可以,求问题原因及解决办法
你好,遇到这种官方驱动连不上但第三方驱动能正常连接的情况,大概率是认证插件适配差异或者连接参数/用户配置的细节问题,结合你的操作和环境我来拆解原因和对应的解决思路:
核心原因分析
为什么pymysql能连上但mysql.connector不行?
- pymysql对MySQL 8.0默认的
caching_sha2_password认证插件兼容性更好,不需要额外配置就能自动处理; - 而官方的mysql.connector对认证方式的要求更严格,哪怕你改了localhost用户的认证方式,也可能因为连接时匹配的用户条目不对、或者没有显式指定认证插件而失败。
针对性解决办法
1. 修正连接对应的用户认证方式
你代码里用的是host="127.0.0.1"(TCP连接),而你之前只修改了'root'@'localhost'(socket连接对应的用户)的认证方式,MySQL会把127.0.0.1的连接匹配到'root'@'%'或者'root'@'127.0.0.1'用户,这个用户的认证方式可能还是caching_sha2_password。
执行以下SQL修改对应用户的认证方式:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 's12345678'; FLUSH PRIVILEGES;
修改后记得重启MySQL服务让配置完全生效。
2. 强制指定认证插件
在你的mysql.connector连接代码里,显式添加auth_plugin参数,强制使用mysql_native_password认证,跳过自动检测的可能问题:
mydb = mysql.connector.connect( host="127.0.0.1", user="root", password="s12345678", auth_plugin='mysql_native_password' )
3. 确认mysql-connector-python的版本
虽然官方文档说支持Python3.12和MySQL8.0.39,但部分新版本的mysql-connector-python可能和Python3.12存在细微兼容问题,你可以尝试降级到稳定版本:
pip uninstall mysql-connector-python pip install mysql-connector-python==8.2.0
4. 尝试切换连接host为localhost
把代码里的host="127.0.0.1"改成host="localhost",因为localhost在MySQL中是通过Unix socket(Windows是命名管道)连接,会直接匹配你之前修改过的'root'@'localhost'用户,可能绕过TCP连接的认证问题。
额外验证步骤
- 再次确认MySQL服务已经重启,避免旧的用户配置缓存;
- 用
mysql -h 127.0.0.1 -u root -p命令手动连接,看是否能正常登录,排除代码外的连接问题。
备注:内容来源于stack exchange,提问作者Siddikur




