不支持 RSA 加密 - 使用 django mysql 和 docker 进行 caching_sha2_password

问题描述 投票:0回答:5

我尝试使用 docker 连接 Mysql 和 django,但出现此错误

2061, 'RSA Encryption not supported - caching_sha2_password plugin was built with GnuTLS support'.

我尝试更改用户并使用

创建数据库
// create a user //

CREATE USER 'user'@'localhost' IDENTIFIED BY 'user';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION;
CREATE USER 'user'@'%' IDENTIFIED BY 'user';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;

// create a database //

CREATE DATABASE user_db;

但仍然是 sqme 错误消息

在settings.py中

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'user_db',
        'USER': 'user',
        'PASSWORD': 'user',
        'HOST': 'db',
        'PORT': '3306',
    }
}

在 docker-compose 中:

db:
    image: mysql:latest
    environment:
        MYSQL_DATABASE: 'user_db'
        MYSQL_USER: 'user'
        MYSQL_PASSWORD: user
        MYSQL_ROOT_PASSWORD: root
    volumes:
        - ./data/mysql/db:/var/lib/mysql
    ports: 
        - 3306:3306

谢谢您的帮助。

mysql django docker
5个回答
9
投票

我已经解决了这个问题,将连接器更改为

mysql-connector-python==8.0.26
而不是
mysqlclient==2.0.3

还有连接设置

DATABASES = {
    'default': {
        #'ENGINE':   'django.db.backends.mysql',
        'ENGINE':   'mysql.connector.django',
        'NAME':     getenv('MYSQL_DATABASE'),
        'USER':     getenv('MYSQL_USER'),
        'PASSWORD': getenv('MYSQL_PASSWORD'),
        'HOST':     'db',
        'PORT':     getenv('MYSQL_PORT', 3306),
        'OPTIONS': {
            'auth_plugin': 'mysql_native_password'
        }
    }
}

3
投票

似乎是 Debian 版本问题。 将“FROM”python 映像设置为 3.10.8-slim-bullseye 允许我保留:caching_sha2_password、MySql-8、mysqlclient 本机驱动程序。

FROM python:3.10.8-slim-bullseye

0
投票

我在我的 docker 文件中添加了

RUN apt-get update && apt-get upgrade -y
,它解决了所有问题。

您只需在构建之前在容器中运行命令

apt-get update && apt-get upgrade -y
即可。


0
投票

用途:

DATABASES = {
    'default': {
        #'ENGINE':   'django.db.backends.mysql',
        'ENGINE':   'mysql.connector.django',
        'NAME':     getenv('MYSQL_DATABASE'),
        'USER':     getenv('MYSQL_USER'),
        'PASSWORD': getenv('MYSQL_PASSWORD'),
        'HOST':     'db',
        'PORT':     getenv('MYSQL_PORT', 3306),
        'OPTIONS': {
            'auth_plugin': 'mysql_native_password'
        }
    }
}

或在您的 DSN 中添加:

mysql://USER:PASS@HOST(:PORT)/DATABASE?auth_plugin=mysql_native_password

0
投票

我对 docker-compose 和两个服务(web 和 db)也有同样的问题。我使用的是 Mysql 8.0 图像,对于 django,我使用的是 python:3-10-buster

我通过将网络图像更改为 python:3-10-bullseye 解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.