DBごとにMySQLダンプしておいたファイルを平行でインポートさせる
DB名.sql.gzと言う名前でgz圧縮して置いてある前提。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#/bin/bash FILES=("$@") PA=() for FILE in ${FILES[@]}; do N=`ps -p ${PA[@]}|wc -l` while [ $N -gt 10 ] do echo "Too many worker running[$N]" sleep 1s N=`ps -p ${PA[@]}|wc -l` done DBNAME=`echo ${FILE} | sed -e 's/\.sql\.gz//g'` echo "${DBNAME} start" gzip -dc ${FILE} | mysql ${DBNAME} & PA+=($!) done |
mydumpimport *.sql.gz
みたいに実行すれば、当該ファイル全てをmysqlに流し込んでくれる。
$!でインポート実行したPIDを配列に記録して、PIDリスト付きpsで動いているプロセスを確認して指定値以上のプロセスがあればsleepして、減ったら再度実行していくだけ。
サーバの能力的に同時実行出来る性能ならwhileのgt右辺を調整して実行すると便利。
Xeon E5 2way + ioDrive環境なんかだと20くらいでもシリアルにやるより遙かに早かった。
(276)