
MySQLのDBダンプファイル .tar.gz をリストアする方法!
こんばんは。開発しているとよくあると思うのですが、検証環境やローカル環境に本番環境のDBをリストアしてデータ確認するとき、皆さんどうやってやっていますか?
自分が扱っているサービスだと、DB容量がまぁまぁあって、ちょっと本番データ確認したいときは、AWS上にある検証用のEC2にたててあるMySQLにリストアするんですが、2時間近くかかることがあります。
急ぐときは、全部戻さないで一部だけ戻してみたいなこともやるんですけど、それはそれで手間がかかっちゃうので。。。
コマンドうったらあとは放置♪
って感じにになると思うので、普通はこんな感じのコマンドですよね?
# zenitsu_db に tar.gz のMySQLダンプファイルをリストアするとき
mysql -u root -p zenitsu_db < mysqldump_20210926.tar.gz
これだと、前回実行したときの時間がだいたい〇〇分位かかったから、今回もだいたい〇〇分って感じで、それに合わせて、お昼行って戻ってきたら
「DB戻ってます!」
ってエンジニアの人にお知らせするってことやっていたんですけど、よくこれいわれるんです。
「すみません。DB戻しってあとどれくらいかかります?」
これいわれるとうーんってなりません?
「さっき戻し始めたから、あと1時間くらいで戻ると思います(汗)」
的な。。。なんともアナログな回答になっていまいませんか?
あとどれくらいでリストア終わるかって、ちょっとわかったらよくない?って思ってGoogle先生に聞いてみたら、イイのありました♪
pv コマンドを使うとよい感じです♪
Google先生に聞けば割とすぐ見つかるので、ご存じのかもしれませんが、Linuxでパッケージインストールしたりするときに進捗バーがでますよね?
あれです。
$ pv tanjiro.md > tanjiro_onika.md
1.92GiB 0:02:11 [16.1MiB/s] [==============================> ] 78% ETA 0:32:12
MySQLのリストアコマンドと組み合わせる場合はこんな感じです。
pv mysqldump_20210926.tar.gz | zcat | mysql -u root -p zenitsu_db
zcat コマンドで、tar.gz ファイルを解凍しなくてもリストアできます。ただ、これダンプファイルが大きいとメモリーに乗らないことがあるのでその場合は素直に一度、tar.gz ファイルを解凍してリストアすると進捗がわかります。。。
これでエンジニアさんからの確認(催促?)に、
「あと、30分くらいで戻ります!!(自信あり)」
で答えられます♪
インストール方法
本番環境以外でコマンド試すなら簡単に、パッケージインストーラーから入れられます。(と思います。。。)
Ubuntu
apt-get install pv
CentOS
yum install pv
Mac OS
brew install pv
root で実行するイメージです。ちゃんとしたインフラエンジニアさんが作ってくれるサーバーだと「sudo」する感じですかね?
要注意事項
若干、ダンプファイル中のテーブルのサイズによってだと思いますが、進捗が前後するので、残り時間をそのままエンジニアさんに伝えるのではなく、あくまで何分くらいというように言いましょう!
急ぎの対応とかで時間がシビアな時は少し多めに伝えて、残り時間が数分になったらPCの前でにらめっこしてあげるとよいと思います。リストア終わったら速攻で、
「今戻りました!!」
ってしてあげると喜ばれます。
あれ、返事だけ読んでみると、普通にリストアするのと、あまりかわっていないですか!?