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换成对应的密码):
如果你的Django是从其他机器连接,把ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';localhost换成对应的IP或者%(允许所有IP)。 - 刷新权限使修改生效:
FLUSH PRIVILEGES; - 退出MySQL,重启你的Django服务器或者重新运行测试用例,应该就能正常连接了。
方案二:升级/安装支持新认证插件的数据库驱动
如果你不想修改MySQL的配置,也可以升级驱动来支持caching_sha2_password:
- 如果你用的是
mysqlclient(Django官方推荐的驱动),确保安装的是1.4.0及以上版本,这个版本开始支持MySQL 8.0的新认证:
注意:Windows下安装mysqlclient可能需要先安装编译依赖,如果遇到安装失败,可以直接下载对应Python版本的预编译wheel文件安装。pip install --upgrade mysqlclient - 如果你用的是
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
相关产品推荐
相关产品推荐

