You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下caching_sha2_password认证插件加载失败求助

解决Django 2.x连接MySQL 8.0的"caching_sha2_password"认证错误

嘿,这个问题我之前帮好几个开发者搞定过,MySQL 8.0默认启用了caching_sha2_password认证插件,但Django 2.x搭配的旧版数据库驱动(比如低版本的mysqlclient或pymysql)还不支持这个新插件,所以才会弹出这个报错。下面给你几个靠谱的解决办法,选一个适合你的就行:

方案一:修改MySQL用户的认证方式(最直接有效)

这个方法不需要动Django的配置,直接调整MySQL的用户认证规则,回到旧版的mysql_native_password,兼容现有驱动:

  • 打开MySQL命令行客户端(或者用Navicat等工具连接),登录你的root账号:
    mysql -u root -p
    
  • 切换到mysql系统数据库:
    USE mysql;
    
  • 修改你的Django连接用户的认证方式(把your_username换成你Django配置里的数据库用户名,your_password换成对应的密码):
    ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
    
    如果你的Django是从其他机器连接,把localhost换成对应的IP或者%(允许所有IP)。
  • 刷新权限使修改生效:
    FLUSH PRIVILEGES;
    
  • 退出MySQL,重启你的Django服务器或者重新运行测试用例,应该就能正常连接了。

方案二:升级/安装支持新认证插件的数据库驱动

如果你不想修改MySQL的配置,也可以升级驱动来支持caching_sha2_password:

  • 如果你用的是mysqlclient(Django官方推荐的驱动),确保安装的是1.4.0及以上版本,这个版本开始支持MySQL 8.0的新认证:
    pip install --upgrade mysqlclient
    
    注意:Windows下安装mysqlclient可能需要先安装编译依赖,如果遇到安装失败,可以直接下载对应Python版本的预编译wheel文件安装。
  • 如果你用的是pymysql,需要安装0.9.3及以上版本,并且在Django项目的根目录(和settings.py同目录)的__init__.py文件里添加以下代码做兼容:
    import pymysql
    pymysql.install_as_MySQLdb()
    

补充说明

为什么会出现这个报错?

MySQL 8.0为了提升安全性,把默认的用户认证插件从mysql_native_password改成了caching_sha2_password,但Django 2.x发布时这个新插件还没被主流Python数据库驱动广泛支持,所以就出现了兼容性问题。

内容的提问来源于stack exchange,提问作者Michael Sheppard III

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:32:28