この記事では、pythonのライブラリmysql.connectorを使って、dockerのmysql8に接続しようとしたとき、caching_sha2_passwordエラーが出でて詰まった人に解決策を述べます!
また、dockerを使っていなくてもcaching_sha2_passwordエラーの対処方法がわかると思います!
概要
pythonでmysql8にmysql.connectorライブラリーを使って接続しようとしたとき、
caching_sha2_passwordエラーが発生しました。
開発環境は以下の通り
macOS Catalina
mysql8(mysql公式のdocker image)
python 3.6
参考に現象が発生したときのコードは以下の通り。
import mysql.connector
#この部分でcaching_sha2_passwordエラーが発生した
db=mysql.connector.connect(host="localhost", port="3306", user="root", password="mysql_pass")
cursor=db.cursor()
cursor.execute("USE test_work")
db.commit()
cursor.execute("""CREATE TABLE IF NOT EXISTS fruits_table(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
fruits VARCHAR(32),
value INT);""")
db.commit()
対処方法は2つ
対処方法は2つありますが、環境によっては、2つとも実施する必要があるようです。
私の環境は、2つの対処をしたら正しく動作するようになりました。
その1・ユーザの認証方式を変更する
解決策の1つ目は、ユーザーの承認方式をcaching_sha2_passwordからmysql_native_passwordに変更する方法です。
mysql8では、デフォルトの認証方式がcaching_sha2_passwordになっています。
しかし、mysql.connectorなど、ライブラリによっては、caching_sha2_passwordに対応していないケースもあります。その場合は、mysql5.7のデフォルトでもあるユーザの認証方式をmysql_native_passwordに変更します。
ユーザの認証方式は以下のようなコマンドで対応できます。
以下の例は、rootユーザの認証方式をmysql_native_password にする例です。
alter user 'root'@'localhost' identified WITH mysql_native_password by 'mysql_pass';
alter user 'root'@'%' identified WITH mysql_native_password by 'mysql_pass';
本当に変更されたかuserテーブルの情報を確認します。
スキーマーをmysqlに選択した上で、以下のSQLを実行します。
select user, host, plugin from user;
しかし、認証方式を変更しただけでは、caching_sha2_passwordエラーが解消しないケースもあります。
ユーザーごとの認証方式をmysql_native_passwordにしただけではcaching_sha2_passwordエラーが解消しないことがある。
もしそのような場合は、次の項目も試してみます。
その2・my.cnfを修正してデフォルトプラグインの設定をmysql_native_passwordにする
- mysql8がインストールされているdockerにログインする。
- ファイル「/etc/mysql/my.cnf 」を開く
- ※「/etc/mysql/conf.d/」にも「my.cnf」が存在するが、mysqlの起動ができなくなるため変更しない。
- ファイルに「default_authentication_plugin= mysql_native_password」という行を追加
- コンテナを一旦stopし、再起動する(service mysql stopが何故か使えないため)
ファイルを変更したら、dockerのコンテナをstopしてからstart(再起動)します。
間違っても、コンテナを削除しないようにします。
これらの対処をしたら、「caching_sha2_passwordエラー」がでなくなり、mysql8に接続してデータを取得できるようになりました。
「caching_sha2_passwordエラー」の対処方法が知りたい人は、ここで終了です!
これ以降は、そもそも「caching_sha2_password」って何?について解説します。
知りたい人はどうぞという内容です。
ところでcaching_sha2_password認証って何?
メイドさん |
caching_sha2_passwordからmysql_native_passwordに変更したら何かしらのデメリットがあるの?
そもそもcaching_sha2_password方式とは何?
解説します。
caching_sha2_password方式は、暗号方式SHA-2を使った認証方式で、サーバー側で、メモリ内に(認証関係のデータを)キャッシュにより、以前、接続したユーザーが再接続したときに、再認証を高速化できるものです。
同じユーザーが何度もmysqlに接続するようなケースでは、高速化されて有効な認証と言えます。
よって、mysql_native_passwordはcaching_sha2_passwordほど、高速な認証方式とは言えないが、デメリットはないと言えるでしょう。
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |