MySQL8.0のデフォルト認証プラグイン「caching_sha2_password」に対応していないクライアント
これまで Mac では MySQL クライアントに「SequelPro」を使っていました。
時代は MySQL5.7 のサポート終了とともに、MySQL8.0 新時代へ。
AWS の RDS に続いて Aurora でもサポートが終了間近となっています。
(2023 年 11 月現在)
今回はローカルの Docker 環境で構築した MySQL8.0 に、SequelPro から接続できなったので、調査と対応をしてみました。
SequelProのエラー内容
Docker で MySQL8.0 を起動するのは簡単で、MySQL5.7 から Docker Hub のイメージを変更するだけです。
FROM mysql:8.0.28
これで問題なく起動しますし、mysql コマンドからは接続できます。
しかし、SequelPro から接続しようとすると以下のエラーが。
MySQL said: Authentication plugin ‘caching_sha2_password’ cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 0x0002): tried: ‘/usr/local/mysql/lib/plugin/caching_sha2_password.so’ (no such file)
どうやら、「caching_sha2_password」の認証プラグインが見つからないよってことですね。
MySQL8.0の認証モードを変更する
セキュリティ的なことを考えるとダメなのでしょうが、今回はローカル環境ということで、MySQL8.0 の認証プラグインを変更して対応します。
mysql> SHOW VARIABLES LIKE 'default_authentication_plugin';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
MySQL の設定は Dockerfile で定義しているので、私は以下の mysqld の設定の最後に「default-authentication-plugin」を指定しました。
RUN { \
echo '[client]'; \
echo 'default-character-set=utf8mb4'; \
echo '[mysqld]'; \
echo 'max_allowed_packet=32MB'; \
echo 'character-set-server=utf8mb4'; \
echo 'collation-server=utf8mb4_bin'; \
echo 'default-authentication-plugin=mysql_native_password'; \
} > /etc/mysql/conf.d/charset.cnf
MySQL5.7 の時と同じにするには「mysql_native_password」を指定したらいいですね。
1mysql> SHOW VARIABLES LIKE 'default_authentication_plugin';
2
3+-------------------------------+-----------------------+
4| Variable_name | Value |
5+-------------------------------+-----------------------+
6| default_authentication_plugin | mysql_native_password |
7+-------------------------------+-----------------------+
これで、SequelPro からも接続することができました。
まとめ
MySQL8.0のデフォルト認証プラグイン「caching_sha2_password」に対応していないクライアントの問題と対応について紹介してきました。
メジャーバージョンアップは、運用している本番サーバや前段の開発サーバでのテストはしっかり行いますが、意外と盲点なのがローカル環境。
ローカルの開発に、コストが発生する AWS の Aurora などのサービスを利用するわけにはいきませんし、少し環境に差異が出てしまうのは仕方がないところ。
こういった些細な TIPS は備忘録として残しておきたいですね。