MongoDBのバックアップの作成と古いバックアップを削除するシェル

MongoDBのバックアップ(DBダンプ)を作成して、指定した期限よりも古いバックアップファイルを削除するシェルを掲載します。

サーバー

目的

MongoDBを使用するサービスを運用するときに、cronなどでスケジュールして定期的にバックアップ(DBダンプ)を作成したいことがあると思います。 共通化したシェルを掲載します。

次の要件で作成しました。

  • ファイル名にバックアップの日時を含めたい
  • 一定期間経過したバックアップは自動的に削除したい

運用環境

次の環境で運用しています。

シェルの内容

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