よしたく blog

ほぼ週刊で記事を書いています

SQLAlchemyを使ってMysql 8.0にアクセスしたらAuthentication plugin 'caching_sha2_password' is not supported エラーが発生した

SQLAlchemyを使ったPython環境でDcoker上に立てたMysql 8.0にアクセスしたらAuthentication plugin 'caching_sha2_password' is not supported エラーが発生した。 これはMySQLのバージョン8.0以降、デフォルトの認証方式がcaching_sha2_passwordに変更されているが、SQLAlchemyが対応していないため発生している。

MySQL5.7までの認証プラグインには mysql_native_password がデフォルトで使用されていましたが、MySQL8.0より新たに追加された caching_sha2_password に変更されました。 SHA-256を使用した、より安全なパスワードの暗号化を提供するとともに、キャッシュを使用して同一ユーザの認証処理を高速化しようという、MySQL推奨の認証プラグインです。

(中略)

しかし、認証プラグインに caching_sha2_password を設定しているユーザは、接続に使用するクライアント又はコネクタ側でも caching_sha2_password をサポートしている必要があり、サポートされていない場合は、認証エラーが返されます。

MySQL8.0新機能 (caching_sha2_password 認証プラグイン) | スマートスタイル TECH BLOG

このエラーを回避するためにcaching_sha2_passwordがサポートされているコネクタを使用することはもちろん挙げられるが、Dockerを使って一時的にアクセスしたかったことと、Pandasのread_sql_query関数では引数sqlalchemyを使わなければいけないので、MySQL側の設定を変更することで回避した。

mysqld --default-authentication-plugin=mysql_native_password