ウェブエンジニア珍道中

日々の技術的に関する経験を書いていきます。脱線もしますが助けになれば幸いです。

Docker上でmysql8を使った時に"Authentication plugin 'caching_sha2_password' cannot be loaded~"と出た時の対処法

Docker上でRails + mysql8.0の環境を作ろうとした際にハマったので残しておきます。

エラー内容

root@c61dd571e666:/app# rails db:create
Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "pool"=>5, "username"=>"root", "password"=>"", "host"=>"db", "database"=>"app_development"}
rails aborted!

rails db:createでデータベースを作ろうとした際にcaching_sha2_passwordが無いよと言われて動作しませんでした。

対処法

mysql8.0からデフォルトの認証形式がcaching_sha2_passwordに変わり、認証するためのプラグインが無いために起こるエラーでした。

※変更に関する記事: MySQL :: MySQL 8.0 Reference Manual :: 6.5.1.3 Caching SHA-2 Pluggable Authentication

よって起動時に認証形式を以前のmysql_native_passwordに戻します。

mysqld --default-authentication-plugin=mysql_native_password

DockerfileのCMDか、docker-compose.ymlのcommandを上記に変更することで動くようになります。

mysqlバージョン上げる度に何かしら地雷を踏むので怖い……。

参考記事

stackoverflow.com

qiita.com