Django连接MySQL遇caching_sha2_password认证插件加载错误
解决Django连接MySQL时的caching_sha2_password认证错误
这个问题我之前也碰到过,核心原因是MySQL 8.0及以上版本默认使用caching_sha2_password作为用户认证插件,但你当前用的MySQLdb库(适配Python3.5的旧版本)不支持这种新的认证方式,所以才会抛出插件加载失败的错误。下面给你两种靠谱的解决思路:
方案一:修改MySQL用户的认证方式(最直接)
把Django专用的MySQL用户认证方式切换为旧版兼容的mysql_native_password,步骤如下:
- 登录MySQL命令行终端:
输入root密码后进入MySQL交互界面。mysql -u root -p - 切换到系统自带的
mysql数据库:USE mysql; - 修改目标用户的认证插件和密码(把
username和password替换成你自己的数据库用户名和密码):ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; - 刷新MySQL权限配置:
FLUSH PRIVILEGES; - 退出MySQL,回到Django项目目录重新运行迁移命令:
python3 manage.py makemigrations
方案二:更换支持caching_sha2_password的数据库驱动
如果不想修改MySQL的认证规则,可以换成支持新认证插件的驱动,推荐两种选择:
选项1:使用mysqlclient
这是MySQLdb的官方分支,完美支持新认证插件,安装步骤:
- 先装系统依赖(以Ubuntu为例):
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential - 再安装mysqlclient:
pip3 install mysqlclient
安装完成后直接重新运行迁移命令即可。
选项2:使用pymysql
这是纯Python实现的MySQL驱动,同样支持新认证插件:
- 安装pymysql:
pip3 install pymysql - 在Django项目根目录(
mysite文件夹)的__init__.py文件中添加以下代码,让pymysql模拟MySQLdb的接口:import pymysql pymysql.install_as_MySQLdb() - 重新运行迁移命令。
另外补充个小细节:你的settings.py里PORT字段是空的,MySQL默认端口是3306,建议改成PORT: '3306',避免可能的连接异常。
内容的提问来源于stack exchange,提问作者Prabhjeet Singh
相关产品推荐
相关产品推荐

