1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

本番DBをダンプしてローカルにインポートを手作業でやっていたので、シェルスクリプトを書いてみました

Last updated at Posted at 2016-10-31

ニーズと、概要

ときどき、ローカルのDBが古くなってきたせいで、サイトに表示されるコンテンツが空っぽになって寂しくなったりします。
そんなときに、僕は本番DBから該当テーブルのデータを取ってきて、ローカルにインポートをしていたりしました。

けど、その手動作業に飽きてきたので、シェルスクリプトを書いてみました。(シェルスクリプトを書いたの初めてで、少し怯えています。)
全テーブルをダンプとかすると、すごいことになりそうだったので、引数にテーブル名を一つ引数にとるスクリプトにしてみました。

使い方の前に ※ 注意事項 :construction_worker:

  • pg_dumpは、いっぱいデータあると排他制御入るので、アクセスが少なく、かつそんなに大量データじゃないとき限定で使用した方がよいです!(cf. pg_dumpでサーバが停止してしまう)
  • 本番のデータを引っ張ってくるので、個人情報の扱いにはお気をつけください!

使い方 :bike:

シェルファイル名が update_table.sh だとしますと以下のように使います。(postsテーブルがあったとして)

sh update_table.sh posts

このように、ローカルでコマンドを打つことで、本番環境の該当テーブルをダンプして一旦保存して、それをローカル(Vagrantの中)でImportさせます。

シェルスクリプト

PostgreSQLです。

update_table.sh
# !/bin/sh

if [ $# != 1 ]; then
  echo "テーブル名をひとつ引数としてわたしてください (ex: sh update_table.sh posts)"
fi
TABLE_NAME=$1

TODAY=$(date "+%Y%m%d")
DUMP_FILE_NAME="/tmp/${TODAY}_${TABLE_NAME}.dump"

# Production config
SERVER="{SERVER}"
HOST="{HOST}"
USER_NAME="{USER}"
DATABASE="{DB}"
PASSWD="{PASSWD}"

# Local config
LOCAL="{LOCAL}"
LOCAL_USER_NAME="{LOCAL_USER}"
LOCAL_DATABASE="{LOCAL_DB}"
LOCAL_PASSWD="{LOCAL_PW}"


echo "Connect to server..."
ssh $SERVER <<HERE
pg_dump -U $USER_NAME -d $DATABASE  -h $HOST  -t $TABLE_NAME -c > $DUMP_FILE_NAME
$PASSWD
HERE
# できればテーブルが存在しなかった場合、コマンドを停止させたかったのですが....できてない...

echo "Connect to local..."
ssh -A $LOCAL <<HERE
scp $SERVER:$DUMP_FILE_NAME $DUMP_FILE_NAME
PGPASSWORD=${LOCAL_PASSWD} psql -U $LOCAL_USER_NAME -d $LOCAL_DATABASE < $DUMP_FILE_NAME
rm -f $DUMP_FILE_NAME
HERE

echo "Connect to server..."
ssh $SERVER <<HERE
rm -f $DUMP_FILE_NAME
HERE

以上です。:bow::thought_balloon:

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?