Djangoプロジェクト 'mysite'をmysqlに接続しようとしています。mysqlでユーザーを作成し、プロジェクトにアクセスするためのすべての権限を付与しました。これらは、settings.pyに加えた変更です。
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
'NAME': 'mysitedb',
'USER': 'username',
'PASSWORD': 'password',
'Host': 'localhost',
'PORT': '',
}
}
python3 manage.py makemigrations
を使用してデータベースを移行しようとすると、次のエラーが発生します。
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")</code></pre>
完全なスタックトレースは次のとおりです。
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 <module>
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")
このエラーを解決するにはどうすればよいですか?私はubuntu16.04プラットフォームでpython 3を使用しています。
問題は(おそらく)MySQLの(新しい)バージョンです。
バージョン8.04以降、MySQLは、以前にmysql_native_passwordが使用されていたデフォルトの認証プラグインとしてcaching_sha2_passwordを使用します(これにより、mysql_native_password認証を期待する古いサービスとの互換性の問題が発生します)。
可能な解決策:
MySQLサーバーを、認証プラグインを変更または変更する以下のバージョンにダウングレードします(ユーザーベース)
たとえば、ユーザーを作成するとき:
CREATE USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
@Kol_yaは、CREATE USER'username '@' localhost 'IDENTIFIED WITH mysql_native_password BY'password'を使用して新しいユーザーを作成しました。ここで、username =新しいユーザー名の作成、password = rootにログインするための現在のパスワード(caching_sha2で作成されたユーザー名)。この手順により、caching_sha2認証エラーなしでMySql Server8.0.13に接続できました。いくつかのスレッドで解決策を探しましたが、これはそのように役立ちました。ありがとう@kol_ya
Cache_sha2の問題を抱えている人への提案。サーバー側では、ユーザー認証タイプがcaching_sha2_passwordではなく標準であることを確認してください。
実際には、MYSQLサーバーをダウングレードする必要はありません。次の2つの手順に従うと、機能するはずです。
ステップ1:mysql_native_passwordを使用するようにMYSQL構成を変更します。 mysqldが使用しているiniファイルの1つを編集します。コマンドを使用して、どれが私のかを確認できます
mysqld --verbose --help
この行が追加されていることを確認してください-
default-authentication-plugin=mysql_native_password
手順2:新しいユーザーを作成するか、既存のユーザーを変更します。 mysql_native_passwordパスワードを使用して新しいものを作成するには:
CREATE USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
とユーザーを変更するには
ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
ちなみに、このステップは@Kol_yaによっても指摘されています
MySql 8.0では、デフォルトの認証プラグインは「caching_sha2_password」です。これにより、認証プラグインの問題が発生します(エラー2059)。MySqlワークベンチで新しいユーザーを作成し、認証を標準に設定できます。