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バージョン上げる度に何かしら地雷を踏むので怖い……。