LoginSignup
28
24

More than 3 years have passed since last update.

MySQLの認証プラグインを変更する方法(caching_sha2_password)

Last updated at Posted at 2020-08-24

はじめに

MySQLに接続できないエラーでハマったので対処法を備忘録としてまとめました。

エラー内容

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

認証プラグインがcaching_sha2_passwordとなっていることが原因だそうです。
そこで、まずはMySQLに接続して認証プラグインを確認します。

ターミナル
$ mysql -u root   //mysqlにrootで接続。rootにパスワードを設定している場合はオプションでパスワードを指定する

mysql> SELECT User, Host, Plugin FROM mysql.user;  //User, Host, Pluginを確認
+------------------+-----------+-----------------------+
| User             | Host      | Plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

rootの認証プラグインがcaching_sha2_passwordになっています。

対策(caching_sha2_passwordをmysql_native_passwordに変更)

認証プラグインをcaching_sha2_passwordからmysql_native_passwordに変更します。
下記が変更するためのコマンドです。

ターミナル
mysql> ALTER USER <User>@<Host> IDENTIFIED WITH mysql_native_password BY '<password>';

User, Host, passwordの部分は置き換えてください。

私の場合はrootを変更したいので下記のようにしました。

ターミナル
mysql> ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'password';

変更できているか確認する

ターミナル
mysql> SELECT User, Host, Plugin FROM mysql.user;  //User, Host, Pluginを確認
+------------------+-----------+-----------------------+
| User             | Host      | Plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |  <= 変更されている!
+------------------+-----------+-----------------------+

Dockerの場合

Dockerのコンテナ内で認証プラグインを変更する場合にはまずコンテナに入る必要があります。

ターミナル
$ docker ps       //DockerのCONTAINER IDを確認
$ docker exec -it <CONTAINER ID> bash     //確認したMySQLのCONTAINER IDを指定してコンテナに接続
# mysql -u root -p
Enter password: <database.ymlで設定したpassword>

mysql> SELECT User, Host, Plugin  FROM mysql.user;  //User, Host, Pluginを確認
+------------------+-----------+-----------------------+
| User             | Host      | Plugin                |
+------------------+-----------+-----------------------+
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

mysql> ALTER USER <User>@<Host> IDENTIFIED WITH mysql_native_password BY '<password>' //rootの認証プラグインを変更

変更されているか確認↓

ターミナル
mysql> SELECT User, Host, Plugin  FROM mysql.user;  //User, Host, Pluginを確認
+------------------+-----------+-----------------------+
| User             | Host      | Plugin                |
+------------------+-----------+-----------------------+
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |  <= 変更されている!
+------------------+-----------+-----------------------+

コンテナを削除して、再度Buildすれば完了です。

ターミナル
$ docker-compose down
$ docker-compose build

終わりに

RailsとMySQLを使用しているとたまーにハマって抜け出せなくなるので、私みたいに時間を無駄にしてほしくないという思いも込めてまとめてみました。
みなさんの一助となれば幸いです。

28
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
24