Dockerでmysqlを利用する際にはまったこと。

Dockerfile等で初期データを流し込みたい場合、mysqld_safeを「バックグラウンド」で起動しておいてmysqlコマンドで流しこみを行うのだが、

nohup mysqld_safe &
mysql -u root < init.sql

のように実行してしまうと、 mysqlサーバが起動する前にコマンドが帰ってきてしまうため2行目で「mysql.sockがない」という旨のエラーが返ってきてしまう。

このような場合、1行目の後に以下のようなループを噛ませるとうまく行くはず。(bashの場合)

nohup mysqld_safe &
for {1..10}; do
  if [ -e /var/lib/mysql/mysql.sock ]; then
    break
  fi
  sleep 1
done