何番煎じかわかりませんが、laradockでLaravel環境をセットアップした時に、mysql周りで詰まった点があったのでQiitaにまとめておきます!
migrate出来ない
laradockのセットアップを終え、php artisan migrate
コマンドを実行しようとしたところ、下記のエラーが発生。
Illuminate\Database\QueryException :
SQLSTATE[HY000] [2054] The server requested authentication
method unknown to the client
(SQL: select * from information_schema.tables
where table_schema = homestead and
table_name = migrations)
調べてみると、MySQLのバージョンが影響していることが判明しました。MySQL 8.0の場合、連携がうまく行かなくなるようです。
https://blog.websandbag.com/entry/2018/05/17/121730
Laradockのドキュメントを読むと、デフォルトでは MySQL 8.0 が走るものの、あくまでも開発段階にあるため、stable バージョンを使った方がいいとしています。
https://laradock.io/documentation/#change-the-mysql-version
今回は MySQL 5.7 バージョンを使用することにします。
laradockフォルダ内の.envファイルを編集します。
MYSQL_VERSION = latest #変更前
MYSQL_VERSION = 5.7 #変更後
2019年2月1日現在、選択できるバージョンは下記の通りです。
- 5.5
- 5.6
- 5.7
- 8.0
そして、コンテナを再起動してあげればいいと思っていたのですが...
mysql コンテナが起動しない
mysqlコンテナが起動しなくなりました。
doneになるものの、STATUS が Exitedとなってしまい、コンテナが立ち上がらなくなってしまいました。
❯ docker-compose up -d mysql
Starting laradock_mysql_1 ... done
❯ docker ps -a | grep laradock_mysql_1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9c2b8b8f62f0 laradock_mysql "docker-entrypoint.s…" 15 minutes ago Exited (2) 21 seconds ago laradock_mysql_1
色々調べまわった結果、有用だった情報はこれ
https://nogson2.hatenablog.com/entry/2018/11/12/152215
MYSQLのバージョンを変更する場合は、DATA_PATH_HOSTで設定したフォルダをきれいして、イメージを作成し直す必要があるらしい。
ということでパスを確認してみます。
❯ cat .env | grep DATA_PATH_HOST
DATA_PATH_HOST=~/.laradock/data
私の環境では~/.laradock/data
に格納されていたので、こちらを使用します。
rm -rf ~/.laradock/data/mysql
docker rmi laradock_mysql -f
docker rmi mysql -f
そして、mysqlをビルドし直します。全てビルドし直させたいので、--no-cache
オプションをつけておきます。
docker-compose build --no-cache mysql
最後にmysql --version
コマンドで起動しているか、バージョンが変更されているかを確認しておきましょう。
❯ docker-compose exec mysql mysql --version
Server version: 5.7.25 MySQL Community Server (GPL)
無事に変更が完了しました!