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