MongoDBのバックアップの作成と古いバックアップを削除するシェル
MongoDBのバックアップ(DBダンプ)を作成して、指定した期限よりも古いバックアップファイルを削除するシェルを掲載します。
目的
MongoDBを使用するサービスを運用するときに、cronなどでスケジュールして定期的にバックアップ(DBダンプ)を作成したいことがあると思います。 共通化したシェルを掲載します。
次の要件で作成しました。
- ファイル名にバックアップの日時を含めたい
- 一定期間経過したバックアップは自動的に削除したい
運用環境
次の環境で運用しています。
- Ubuntu 16.04.6 LTS
- MongoDB 3.x の公式DockerイメージのLinux版(
mongo:3
)
シェルの内容
mongo-backup.sh
#!/bin/bash
if [ $# -ne 5 ]; then
echo "Usage: $0 <db-host> <db-port> <db-name> <out-dir> <backup-keep-time-in-minutes>"
exit 1
fi
readonly DB_HOST=$1
readonly DB_PORT=$2
readonly DB_NAME=$3
readonly OUT_DIR=$4
readonly BACKUP_KEEP_TIME=$5
readonly TIMESTAMP=`date +%Y%m%d-%H%M%S`
readonly DUMP_NAME=${DB_NAME}-dbdump.gz
mongodump --host ${DB_HOST} --port ${DB_PORT} -d ${DB_NAME} --gzip --archive="${OUT_DIR}/${TIMESTAMP}-${DUMP_NAME}" && \
(
echo 'mongodump successfully'
echo 'Deleting old backups...'
find ${OUT_DIR} -name "????????-??????-${DUMP_NAME}" -mmin +${BACKUP_KEEP_TIME} -delete
echo 'Done'
)
使用方法
次の形式で実行します。変数は置き換えてください。
mongo-backup.sh $DB_HOST $DB_PORT $DB_NAME $OUT_DIR $BACKUP_KEEP_TIME
DB_HOST
: MongoDBのホストDB_PORT
: MongoDBのポートDB_NAME
: バックアップするDBの名前OUT_DIR
: バックアップファイルの出力先ディレクトリBACKUP_KEEP_TIME
: 出力先ディレクトリの既存のファイルを保持する期間(分)、これより古いファイルは削除される
ローカルホストのDBをバックアップする例:
mongo-backup.sh localhost 27017 foo /path/to/backups 43200