LumenとMysqlを触っていて少しはまったので備忘録として残しておく。
#参考サイト
【Laravel】MySQL 8でmigration時にエラーが出たときの対処方法
https://takakisan.com/laravel-mysql-8-migration-error-fix/
#状況
Dockerで立ち上げたLumen(Laravel) + MySQL で Lumenのコンテナに入り
以下のコマンドを入力
php artisan migrate
#Dockerコード(MySQL)
MySQLのDockerfileのコードは以下
FROM mysql:8.0.16
MySQL部分のdocker-compose.ymlのコードは以下
mysql:
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: keijiban
MYSQL_PASSWORD: root
MYSQL_USER: user
#Lumenでの.envファイル
.envファイルでのmysql設定部分は以下
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=keijiban
DB_USERNAME=user
DB_PASSWORD=root
#調べた結果
どうやらMySQL8ではユーザー作成時の認証方式のデフォルトがcaching_sha2_passwordになっているのが原因
#MySQLを調べてみる
まず、Mysqlのコンテナに入り、Mysqlにログイン、
今回、ユーザー名と認証プラグインがわかればいいので以下のコマンドを入力
select user, plugin from mysql.user;
すると以下のように出力され、user部分がcaching_sha2_passwordであることがわかる。
#MySQLの変更
その後、確認ができたらcaching_sha2_passwordの認証方式を変更する。
変更するには以下のコマンドを入力
alter user 'user' identified with mysql_native_password by 'pass';
※今回、.envファイルでDB_USERNAME=user、DB_PASSWORD=rootと指定しているので、'user'部分はuser、'pass'部分はrootに変更(この部分は指定しているのに合わせて)
コマンドを入力後、再度ユーザー名と認証プラグインを確認してみると
このようにcaching_sha2_passwordからmysql_native_passwordに変わっていることが確認できる。
#Lumenで再度php artisan migrateを行ってみる。
MySQLの認証プラグインの変更が終われば、MyAQLのコンテナから抜け、Lumenのコンテナに入り再度
php artitisan migrate