技術系TIPS
PR

MySQL8.0のデフォルト認証プラグイン「caching_sha2_password」に対応していないクライアント

saratogax
記事内に商品プロモーションを含む場合があります

これまで Mac では MySQL クライアントに「SequelPro」を使っていました。

あわせて読みたい
【SequelPro】MacのGUIベースのMySQLクライアントツール
【SequelPro】MacのGUIベースのMySQLクライアントツール

時代は 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 は備忘録として残しておきたいですね。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました