docker-composeでMySQLを使いつつ、例えばGithub Actionsなどで自動で処理を行う等をする場合に気をつけたいこと。 MySQLサーバが起動し終わるまで待機しないといけないですよね。 自分もよく起動する前にアクセスしたりphpunit等を実行してエラーになってしまうことによく遭遇します。その結果、Github Actionsなどのチェック処理が失敗してしまうという。。
問題
以下が今回のエラー内容になります。
Failed to create mysql.mysql database, SQLSTATE[HY000] [2002] Connection refused
データベースの起動が完了せずに、SQLSTATE[HY000] [2002] Connection refused が発生してしまいますね。
解決策
そこで、以下のようなmysqladminコマンドを行い、DBが起動するまで待ちます。
docker-compose exec -T mysql bash -c "mysqladmin --wait --count 60 ping -proot || exit 1"
mysqladmin ping
を使ってmysqlが起動中か把握することができます。
これを書くことで、起動するまでここで待機するような処理が実現できます。