You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动