DockerでRails環境を作ろうとしてMysql2::Error::ConnectionErrorになった

110
_110365
Published in
4 min readFeb 7, 2020

DockerでRailsの開発環境を構築中、見たことないエラーに出くわしたのでメモ。

Mysql2::Error::ConnectionError

Plugin caching_sha2_password could not be loaded: /usr//usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

MySQL8.0以降、caching_sha2_password というのを使った認証方式に変わったのが原因。それまでは mysql_native_password 、MySQL5.6からは sha256_password という認証方式だったようです。

参考:http://dsas.blog.klab.org/archives/2019-01/mysql-new-auth-method.html

念の為バージョン確認してみたら以下の通り8.0.18でした。
mysqlにログインしてたのでselect version(); で確認。(mysql --versionで確認するのが面倒だった)

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.18 |
+-----------+
1 row in set (0.01 sec)

認証方式(認証プラグイン)も一応確認。

mysql> show variables like 'default_authentication_plugin';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
1 row in set (0.03 sec)

で、なぜエラーになるのか

DBサーバ側はデフォルトで新しい認証方式を使うようになっているけれど、クライアント側がその認証方式に対応していないと接続できないみたい。DockerでDBとアプリのコンテナを分けているので、アプリ側のmysqlクライアントのアップデート等をする必要があるのだと思う。
mysql_native_password に戻す方法もあるけれど、戻さない方法で試してみたい。

(後日追記予定)

参考:

--

--