django.db.utils.operationalError: (2059, “Complemento de autenticación ‘caching_sha2_password’”)

Estoy tratando de conectar mi proyecto django ‘mysite’ a mysql. Hice un usuario en mysql y le concedí todos los privilegios para acceder al proyecto. Estos son los cambios que hice en settings.py:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysitedb', 'USER': 'username', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } } 

Ahora, cuando trato de migrar la base de datos usando python3 manage.py makemigrations , recibo el siguiente error:

 django.db.utils.OperationalError: (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory")

El seguimiento completo de la stack es el siguiente:

 Traceback (most recent call last): File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/base/base.py", line 194, in connect self.connection = self.get_new_connection(conn_params) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 236, in get_new_connection return Database.connect(**conn_params) File "/usr/lib/python3/dist-packages/MySQLdb/__init__.py", line 81, in Connect return Connection(*args, **kwargs) File "/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 204, in __init__ super(Connection, self).__init__(*args, **kwargs2) _mysql_exceptions.OperationalError: (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "manage.py", line 15, in  execute_from_command_line(sys.argv) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line utility.execute() File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/core/management/__init__.py", line 365, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/core/management/base.py", line 288, in run_from_argv self.execute(*args, **cmd_options) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/core/management/base.py", line 332, in execute self.check() File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/core/management/base.py", line 364, in check include_deployment_checks=include_deployment_checks, File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/core/management/base.py", line 351, in _run_checks return checks.run_checks(**kwargs) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/core/checks/registry.py", line 73, in run_checks new_errors = check(app_configs=app_configs) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/core/checks/model_checks.py", line 27, in check_all_models errors.extend(model.check(**kwargs)) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/models/base.py", line 1200, in check errors.extend(cls._check_fields(**kwargs)) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/models/base.py", line 1272, in _check_fields errors.extend(field.check(**kwargs)) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 894, in check errors = super().check(**kwargs) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 206, in check errors.extend(self._check_backend_specific_checks(**kwargs)) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 303, in _check_backend_specific_checks return connections[db].validation.check_field(self, **kwargs) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/base/validation.py", line 21, in check_field field_type = field.db_type(self.connection) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 648, in db_type return connection.data_types[self.get_internal_type()] % data File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/utils/functional.py", line 36, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 133, in data_types if self.features.supports_microsecond_precision: File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/utils/functional.py", line 36, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/mysql/features.py", line 65, in supports_microsecond_precision return self.connection.mysql_version >= (5, 6, 4) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/utils/functional.py", line 36, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 345, in mysql_version with self.temporary_connection() as cursor: File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__ return next(self.gen) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/base/base.py", line 576, in temporary_connection cursor = self.cursor() File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/base/base.py", line 255, in cursor return self._cursor() File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/base/base.py", line 232, in _cursor self.ensure_connection() File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/base/base.py", line 194, in connect self.connection = self.get_new_connection(conn_params) File "/home/prabhjeet/.local/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 236, in get_new_connection return Database.connect(**conn_params) File "/usr/lib/python3/dist-packages/MySQLdb/__init__.py", line 81, in Connect return Connection(*args, **kwargs) File "/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 204, in __init__ super(Connection, self).__init__(*args, **kwargs2) django.db.utils.OperationalError: (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory") 

¿Cómo puedo resolver este error? Estoy usando python 3 en la plataforma ubuntu 16.04.

El problema es (probablemente) su (nueva) versión de MySQL.

A partir de la versión 8.04, MySQL usa caching_sha2_password como complemento de autenticación predeterminado donde anteriormente se usó mysql_native_password (lo que causa problemas de compatibilidad con los servicios más antiguos que esperan la autenticación mysql_native_password).

Soluciones posibles:

Disminuya la calificación del servidor MySQL a una versión debajo de ese cambio o cambie el complemento de autenticación (en base a usuarios)

por ejemplo, al crear el usuario:

 CREATE USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 

En realidad, no es necesario degradar el servidor MYSQL. Siga estos dos pasos y debería funcionar:

Paso 1: Cambie la configuración de MYSQL para usar mysql_native_password. Edite uno de los archivos ini que mysqld está usando. Usted puede ver cuál está usando mi comando

 mysqld --verbose --help 

y asegúrese de que se agregue esta línea –

 default-authentication-plugin=mysql_native_password 

Paso 2: Crea una nueva o modifica el usuario existente. Para crear una contraseña nueva con mysql_native_password:

 CREATE USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password'; 

y alterar usuario

 ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password'; 

Por cierto, este paso también es señalado por @Kol_ya

@Kol_ya creó un nuevo usuario utilizando CREATE USER ‘username’ @ ‘localhost’ IDENTIFICADO CON mysql_native_password POR ‘password’; donde nombre de usuario = creación de nuevo nombre de usuario y contraseña = contraseña actual para iniciar sesión en la raíz (nombre de usuario creado con caching_sha2). Este paso me permitió conectarme a MySql Server 8.0.13 sin tener un error de autenticación caching_sha2. Busqué una solución para varios hilos, pero este me ayudó así. Gracias @kol_ya

Sugerencia para las personas que tienen problemas de caching_sha2. En el lado del servidor, asegúrese de que su tipo de autenticación de usuario sea estándar, no de caching_sha2_password.

Este error generalmente se obtiene cuando el usuario de la base de datos no tiene todo el acceso a la base de datos

Ejecuta este comando:

 ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password'; 

* Asegúrese de tener su servidor MySQL en ejecución.