前にHeroku運用で使ってたスクリプト
大概の環境で使えるはず。
MySQLはその辺に転がってそうだし俺にニーズがないから割愛
もちろん実運用時から色々そぎ落としてるので動作未実証
MongoDB
# !/bin/sh
LOCAL_DIR=$(cd $(dirname $0)/..;pwd)/dumps
TARGET_DIR=$LOCAL_DIR/`date +%Y%m%d`
echo "mkdir $TARGET_DIR"
mkdir $LOCAL_DIR
mkdir $TARGET_DIR
# 本番環境DB設定
PRODUCTION_DBNAME=<<DB NAME>>
PRODUCTION_USERNAME=<<USER NAME>>
PRODUCTION_PASSWORD=<<PASS WORD>>
PRODUCTION_HOST=<<DATABASE HOST>>
PRODUCTION_DUMPFILE=production.sql
# ローカル環境
LOCAL_DBNAME=development_database
LOCAL_HOST=0.0.0.0:27017
LOCAL_USERNAME=<<USER NAME>>
LOCAL_PASSWORD=<<PASS WORD>>
LOCAL_DUMPFILE=local.sql
# Monogo DB
# TARGETDIR 向けに 本番環境 dump 作成
mongodump -h $PRODUCTION_HOST -d $PRODUCTION_DBNAME -u $PRODUCTION_USERNAME -p $PRODUCTION_PASSWORD -o $TARGET_DIR --excludeCollectionsWithPrefix=system
# ローカルもバックアップ
mongodump -h $LOCAL_HOST -d $LOCAL_DBNAME -o $TARGET_DIR
# ローカルDB Drop
mongo $LOCAL_DBNAME --eval "db.dropDatabase();"
# ローカルDB にRestore
mongorestore -h $LOCAL_HOST -d $LOCAL_DBNAME $TARGET_DIR/$PRODUCTION_DBNAME
Postgresql
# !/bin/sh
LOCAL_DIR=$(cd $(dirname $0)/..;pwd)/dumps
TARGET_DIR=$LOCAL_DIR/`date +%Y%m%d`
echo "mkdir $TARGET_DIR"
mkdir $LOCAL_DIR
mkdir $TARGET_DIR
# 本番環境DB設定
PRODUCTION_DBNAME=<<DB NAME>>
PRODUCTION_USERNAME=<<USER NAME>>
PRODUCTION_PASSWORD=<<PASS WORD>>
PRODUCTION_HOST=<<DATABASE HOST>>
PRODUCTION_DUMPFILE=production.sql
# ローカル環境
LOCAL_DBNAME=development_database
LOCAL_HOST=0.0.0.0:27017
LOCAL_USERNAME=<<USER NAME>>
LOCAL_PASSWORD=<<PASS WORD>>
LOCAL_DUMPFILE=local.sql
# Postgresqp
# TARGETDIR 向けに 本番環境 dump 作成
PGPASSWORD=$PRODUCTION_PASSWORD pg_dump -C -h $PRODUCTION_HOST -U $PRODUCTION_USERNAME -Fc $PRODUCTION_DBNAME > $TARGET_DIR/$PRODUCTION_DUMPFILE
# ローカルもバックアップ
pg_dump -Fc $LOCAL_DBNAME > $TARGET_DIR/$LOCAL_DUMPFILE
# ローカルDB Drop
psql -c "drop database $TARGET_DIR;" postgres
# ローカルDB にRestore
pg_restore -d $LOCAL_DBNAME $TARGET_DIR/$PRODUCTION_DUMPFILE