Skip to content

Instantly share code, notes, and snippets.

@jystewart
Created July 12, 2011 13:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jystewart/1077960 to your computer and use it in GitHub Desktop.
Save jystewart/1077960 to your computer and use it in GitHub Desktop.
Basic script to do mongodb backups a la automysqlbackup
#!/bin/bash
#
# A very quick, dirty script for doing daily and weekly mongodb backups
# using mongodump. Probably not the best way to do the backups, but it's
# a stopgap until we build in more redundancy via slaves, etc.
#
# Mostly stolen from automysqlbackup - http://sourceforge.net/projects/automysqlbackup/
BACKUPDIR="/var/lib/automongodbbackup"
DBNAMES="guides_staging"
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/mysql/bin
DATE=`date +%Y-%m-%d_%Hh%Mm` # Datestamp e.g 2002-09-21
DOW=`date +%A` # Day of the week e.g. Monday
DNOW=`date +%u` # Day number of the week 1 to 7 where 1 represents Monday
DOM=`date +%d` # Date of the Month e.g. 27
M=`date +%B` # Month e.g January
W=`date +%V` # Week Number e.g 37
VER=2.5 # Version Number
LOGFILE=$BACKUPDIR/$DBHOST-`date +%N`.log # Logfile Name
LOGERR=$BACKUPDIR/ERRORS_$DBHOST-`date +%N`.log # Logfile Name
BACKUPFILES=""
dbdump () {
touch $2
chmod 600 $2
mongodump --db $1 > $2
return 0
}
compression () {
bzip2 -f -v $1 2>&1
return 0
}
echo Backup Start Time `date`
echo ======================================================================
# Monthly Full Backup of all Databases
if [ "$DOM" = "01" ]; then
for MDB in $MDBNAMES
do
# Prepare $DB for using
MDB="`echo $MDB | sed 's/%/ /g'`"
if [ ! -e "$BACKUPDIR/monthly/$MDB" ] # Check Monthly DB Directory exists.
then
mkdir -p "$BACKUPDIR/monthly/$MDB"
fi
echo Monthly Backup of $MDB...
dbdump "$MDB" "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.mongo"
compression "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.mongo"
BACKUPFILES="$BACKUPFILES $BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB..mongo"
echo ----------------------------------------------------------------------
done
fi
for DB in $DBNAMES
do
# Prepare $DB for using
DB="`echo $DB | sed 's/%/ /g'`"
# Create Seperate directory for each DB
if [ ! -e "$BACKUPDIR/daily/$DB" ] # Check Daily DB Directory exists.
then
mkdir -p "$BACKUPDIR/daily/$DB"
fi
if [ ! -e "$BACKUPDIR/weekly/$DB" ] # Check Weekly DB Directory exists.
then
mkdir -p "$BACKUPDIR/weekly/$DB"
fi
# Weekly Backup
if [ "$DNOW" = "$DOWEEKLY" ]; then
echo Weekly Backup of Database \( $DB \)
echo Rotating 5 weeks Backups...
if [ "$W" -le 05 ];then
REMW=`expr 48 + $W`
elif [ "$W" -lt 15 ];then
REMW=0`expr $W - 5`
else
REMW=`expr $W - 5`
fi
eval rm -fv "$BACKUPDIR/weekly/$DB/${DB}_week.$REMW.*"
echo
dbdump "$DB" "$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.mongo"
compression "$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.mongo"
BACKUPFILES="$BACKUPFILES $BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.mongo"
echo ----------------------------------------------------------------------
# Daily Backup
else
echo Daily Backup of Database \( $DB \)
echo Rotating last weeks Backup...
eval rm -fv "$BACKUPDIR/daily/$DB/*.$DOW.mongo.*"
echo
dbdump "$DB" "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.mongo"
compression "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.mongo"
BACKUPFILES="$BACKUPFILES $BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.mongo$SUFFIX"
echo ----------------------------------------------------------------------
fi
done
echo Backup End `date`
echo ======================================================================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment