Laradock で mysql がうまく動作しない時は ( mysqlコンテナが起動しない、migration 出来ない)


何番煎じかわかりませんが、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ファイルを編集します。

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となってしまい、コンテナが立ち上がらなくなってしまいました。

laradock/
❯ 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で設定したフォルダをきれいして、イメージを作成し直す必要があるらしい。

ということでパスを確認してみます。

laradock/
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)

無事に変更が完了しました!