RubyOnRails、Authentication plugin 'caching_sha2_password' cannot be loadedエラーの解決法
Ruby on rails 開発時に、databaseをmysql 8.0に設定してしたく、database.ymlをmysql設定の上で、rails db:migrate を実行したところ、**エラー「Authentication plugin ‘caching_sha2_password’ cannot be loaded」**となった時の解決法を共有します。
*laravelにも同様のエラーが発生するとの。
環境の整理
- 開発環境:Windows10 Home 64ビットオペレーティングシステム、x64ベースプロセッサ
- Rails version 5系
- Mysql
- version 8.0
- user: root
- password: root(=今回の例)
- RubyOnRailsのdatabase.yml設定状況
原因
mysql 8.0以降に、認証方式がcaching_sha2_passwordを使うようになったこと。
しかし、Railsはこれに対応していなかったこと。
方法
対象のユーザーの認証方式を「caching_sha2_password」から「mysql_native_password」に変更する。
今回をuserがrootの認証方式を変更する。
-
mysql -u root -p
でmysqlにアクセスする -
root
(今回のpassword)を入力、Enterする。 -
SELECT user, host, plugin FROM mysql.user;
でユーザー一覧を表示させ、確認する。 -
ALTER USER root IDENTIFIED WITH mysql_native_password BY 'root';
を実行する。- 構文:
ALTER USER ユーザー名 IDENTIFIED WITH mysql_native_password BY 'password';
- 構文:
-
SELECT user, host, plugin FROM mysql.user;
でrootの認証方式が変更されていることを確認する。
-
exit
でmysqlから抜ける -
rails db:migrate
で本題のrailsのmigrateコマンドを実行する。
*補足:
my.ini(macだとmy.cnf)にて、
default_authentication_plugin=caching_sha2_password
を
default_authentication_plugin=mysql_native_password
に変更すると、エラーが消えるとの話もあったが、
変更したあとでmysqlを再起動しても変更されなかった。
ちなみに、my.iniの場所は「C:\ProgramData\MySQL\MySQL Server 8.0」である。