You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用mysql.connector连接MySQL 8.0与Python 3.9.6时遭遇1045权限拒绝错误的技术求助

解决mysql.connector连接MySQL 8.0时的1045访问拒绝错误

我之前也碰到过一模一样的问题——pymysql能正常连,换mysql.connector就报访问拒绝,咱们一步步来排查解决:

  • 检查密码参数的键名:这是最容易踩的坑!pymysql支持用passwd作为密码参数,但mysql.connector要求用password。你代码里写的是passwd='<correct password>',这大概率是问题根源。修改后的代码应该是:

    import mysql.connector as sql
    s = sql.connect(host='localhost', user='root', password='<correct password>')
    
  • 升级mysql.connector到最新版本:MySQL 8.0默认使用caching_sha2_password认证插件,旧版的mysql.connector对这个插件支持不佳。执行这条命令升级官方维护的版本:

    pip install --upgrade mysql-connector-python
    

    注意要安装的是mysql-connector-python,不是旧的mysql-connector包。

  • 修改MySQL用户的认证插件:如果升级后还是不行,咱们可以把root用户的认证方式改成兼容性更好的mysql_native_password。登录MySQL命令行,执行以下SQL:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<你的正确密码>';
    FLUSH PRIVILEGES;
    

    执行完后再重新用mysql.connector连接试试。

  • 尝试用IP地址代替localhost:Windows系统下有时候localhost会解析成IPv6地址::1,而你的MySQL root用户可能只允许IPv4的127.0.0.1访问。把host参数改成127.0.0.1试试:

    s = sql.connect(host='127.0.0.1', user='root', password='<correct password>')
    

先从第一个方案开始试,参数名错误是最常见的原因,大概率能直接解决你的问题。

内容的提问来源于stack exchange,提问作者D.B

火山引擎 最新活动