(2059,“Authentication Plugin'caching_sha2_password'”)在Django上运行与MYSQL数据库连接的服务器时

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

我想配置我的django项目,以便将它与使用workbench 8.0创建的MYSQL中的数据库连接, 然后我想通过运行来运行服务器

python manage.py runserver

来自anaconda命令提示符, 这样我就可以使用Django界面来可视化和改变数据。 请注意,我不想降级工作台8.0。 这些是我所做的步骤: 从anaconda提示:

pip install mysqlclient

在我的项目文件夹中,在settings.py中

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'schema_meta',
        'USER': 'root',
        'PASSWORD': '<mypassword>',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    },
}

在mysql服务器的目录中,我打开cnf.ini并插入[client]部分:

[client]
database=schema_meta
host=127.0.0.1
user=root
password=<mypassword>
port=3306
default-character-set = utf8

然后从anaconda提示我跑

Python manage.py runserver

我得到了错误

django.db.utils.OperationalError:(2059,无法加载“身份验证插件'caching_sha2_password':找不到指定的模块。

所以我尝试通过以下线程来解决它: django.db.utils.operationalError: (2059,"Authentication Plugin 'caching_sha2_password'")

我打开mysql工作台,然后运行这个查询:

delete from mysql.user
where user='root'
and host = '127.0.0.1';
flush privileges;
CREATE  USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '<mypassword>';

然后,在my.ini文件中我改变了

default-authentication-plugin= caching_sha2_password

default-authentication-plugin=mysql_native_password

最后从anaconda提示:

python manage.py runserver

但我又得到了

django.db.utils.OperationalError:(2059,无法加载“身份验证插件'caching_sha2_password':找不到指定的模块。

现在,出了什么问题?为什么它没有得到认证方法的变化?

为了检查没有其他错误,从mysql工作台,从第一个“主页”视图,我右键单击我的数据库,我打开“编辑连接”,我点击“测试连接”,软件说,连接成功。

mysql workbench saying connection successfully established

此外,我想检查问题是否在我的Django设置中。所以从anaconda提示我跑

pip install pymysql

然后在项目文件夹中我创建了一个“connect_to_mysql.py”脚本,其中包含以下代码:

import pymysql.cursors
mydb = pymysql.connect(host='127.0.0.1',
                             user='root',
                             password='<mypassword>',
                             db='schema_meta',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)
print(mydb)

这似乎很好,因为我跑的时候

connect_to_mysql.py 

来自蟒蛇,我明白了

pymysql.connections.Connection对象位于0x000002013F2851D0

我想这意味着“连接成功建立”。 并且为了确保问题出现在mysql(mysql连接器,我猜),我用这段代码创建了一个文件“connect_to_mysql_2.py”:

import mysql.connector
mydb = mysql.connector.connect(user='root', password='<mypassword>',
                             host='127.0.0.1', database='meta_schema')
print(mydb)

当我从anaconda运行时,我又得到了

“不支持身份验证插件”{0}“”。format(plugin_name))mysql.connector.errors.NotSupportedError:不支持身份验证插件“caching_sha2_password”

这意味着我通过处理mysql workbench和my.ini文件来修复任何问题。 如何让我的Django与我的mysql数据库连接并运行我的服务器? 有没有办法使用pymysql连接器而不是mysql连接器建立服务器连接器?

mysql django mysql-workbench mysql-connector pymysql
3个回答
1
投票

这可能不是你的python代码中的问题,而是在python连接器中。 caching_sha2_password插件现在是默认的auth插件,客户端必须支持它才能连接。因此,最好的解决方案是更新您的python连接器。另一种方法是禁用此插件,但这是我不建议的,因为它会降低服务器的安全性。


1
投票

PyMySQL在0.9.0中添加了对caching_sha2_password的支持,尽管在0.9.1中修复了Py2错误。

install instructions中也注意到,对于caching_sha2_password,还有额外的要求:

python3 -m pip install PyMySQL[rsa]

0
投票

我想我解决了。

按照这个主题

https://stackoverflow.com/a/21740692/7658051

在settings.py中,在DATABASES条目中,我替换了

'ENGINE': 'django.db.backends.mysql'

'ENGINE': 'mysql.connector.django',

再次,如此处所述,

https://django-mysql.readthedocs.io/en/latest/checks.html#django-mysql-w003-utf8mb4

我也补充说

'OPTIONS': {
            # Tell MySQLdb to connect with 'utf8mb4' character set
            'charset': 'utf8mb4',
        },
        # Tell Django to build the test database with the 'utf8mb4' character set
        'TEST': {
            'CHARSET': 'utf8mb4',
            'COLLATION': 'utf8mb4_unicode_ci',
        }

如果我跑了

python manage.py runserver

它似乎工作,即使我无法访问http://127.0.0.1:8000/admin,因为我连接到遗留数据库,所以我仍然需要检查数据库和我还需要学习的东西。

作为第二个证明连接正在运行的证据,当我运行时

connect_to_mysql_2.py

(见(2059,“Authentication Plugin 'caching_sha2_password'”) when running server connected with MYSQL database on Django

我终于明白了

mysql.connector.connection_cext.CMySQLConnection对象位于0x000001DFB7521550

所以我真的认为这次连接正在进行。

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