Created
July 12, 2011 13:19
-
-
Save jystewart/1077960 to your computer and use it in GitHub Desktop.
Basic script to do mongodb backups a la automysqlbackup
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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