2018-12-5

MySQLのver8以降SequelProで接続出来ない

雑な技術メモ

Docker で立ち上げた MySQL サーバーに対して SequelPro で接続しようとしたところ、

ホスト 127.0.0.1 に接続できなかったか、リクエストがタイムアウトしました。

アドレスが正しく必要な権限のあることを確認するか、接続タイムアウトを増やして試してください(現在 10 秒)。

MySQL の応答: Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/lib/plugin/caching_sha2_password.so, 2): image not found

こちらのようなエラーが発生し接続に失敗した。

原因は、MySQL の ver8 から認証プラグインがcaching_sha2_passwordというものに変更しており、SequelPro がその認証方式に対応していないため接続に失敗する。

自前の Vagrant で構築した環境や、さくらのサーバーでは SequelPro で接続できていたのは、MySQL が ver5.7 だったため。こちらの場合認証プラグインはmysql_native_passwordとなっている。

一時回避策

認証プラグインmysql_native_passwordでユーザーを作成したら一応回避できるという話。(もちろんセキュリティは落ちる模様)

create user user_name@'%' identified with mysql_native_password by 'user_password';

ただ、実際試したところこの対応を行うと認証エラーは回避できたが、認証後にNSInvalidArgumentExceptionが発生。MySQL 側でエラーは発生しなかったがアプリ側でエラーが出てきてしまった。

もうこれに関しては SequelPro の MySQL8 対応を待つか別クライアントに乗り換えるかしないといけなさそう。

MySQL5.7 のイメージを使用するのもありかもしれない。

参考

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