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