#!/bin/bash # ibackup.com destination IBACKUP_DEST=$1 # database names DB_NAMES=$2 # binaries we need MYSQLDUMP=/usr/bin/mysqldump GZIP=/bin/gzip GPG=/usr/bin/gpg RSYNC=/usr/bin/rsync STUNNEL=/usr/bin/stunnel4 # password for ibackup.com # # format of $HOME/.ibackup is # # IBACKUP_USERNAME=username # IBACKUP_PASSWORD=password # GPG_EMAIL=your@email.com DOTIBACKUP="$HOME/.ibackup" if [ ! -r $DOTIBACKUP ]; then echo "Need $DOTIBACKUP file for username and password!" exit 1 else PERMS=`/bin/ls -l $DOTIBACKUP | /usr/bin/awk '{print $1}'` fi if [ $PERMS != "-rw-------" ]; then echo "Permissions on $DOTIBACKUP are wrong!" echo "Should be -rw-------, actually is $PERMS" exit 1 fi . $DOTIBACKUP export RSYNC_PASSWORD=$IBACKUP_PASSWORD # local stunnel4 port STUNNEL_PORT=`/bin/grep 'accept' /etc/stunnel/ibackup.conf | awk '{print $3}'` # place to dump everything DUMPDIR="$HOME/.ibackup_data" if [ ! -d $DUMPDIR ]; then mkdir $DUMPDIR fi # today, for tagging the dumpfile DATE=`/bin/date +%Y-%m-%d` # yesterday, and the day before that ONEDAYAGO=`/bin/date -d '1 day ago' +%Y-%m-%d` TWODAYSAGO=`/bin/date -d '2 days ago' +%Y-%m-%d` if [ "x$DB_NAMES" == "x" ]; then echo "Need argument for db name(s)!" exit 1 fi if [ ! -x $MYSQLDUMP ]; then echo "Need $MYSQLDUMP!" exit 2 fi if [ ! -x $GZIP ]; then echo "Need $GZIP!" exit 3 fi if [ ! -x $GPG ]; then echo "Need $GPG!" exit 4 fi if [ ! -x $RSYNC ]; then echo "Need $RSYNC!" exit 5 fi if [ ! -x $STUNNEL ]; then echo "Need $STUNNEL!" exit 6 fi cd $DUMPDIR echo -n "dumping $DB_NAMES to $DUMPDIR/$IBACKUP_DEST-$DATE.mysql... " $MYSQLDUMP --opt --databases $DB_NAMES > $IBACKUP_DEST-$DATE.mysql echo "done!" echo -n "gzipping $DUMPDIR/$IBACKUP_DEST-$DATE.mysql... " $GZIP $DUMPDIR/$IBACKUP_DEST-$DATE.mysql echo "done!" echo -n "encrypting $DUMPDIR/$IBACKUP_DEST-$DATE.mysql... " $GPG -e -r $GPG_EMAIL $DUMPDIR/$IBACKUP_DEST-$DATE.mysql.gz echo "done!" if [ $? -ne 0 ]; then echo "encryption failed!" exit 7 fi echo -n "removing $DUMPDIR/$IBACKUP_DEST-$DATE.mysql.gz... " /bin/rm -fv $DUMPDIR/$IBACKUP_DEST-$DATE.mysql.gz echo "done!" echo "Starting stunnel for rsync..." /etc/init.d/stunnel4 start $RSYNC -r -v -z -t --delete-after --exclude $IBACKUP_DEST-$ONEDAYAGO* --exclude $IBACKUP_DEST-$TWODAYSAGO* $DUMPDIR/ $IBACKUP_USERNAME@localhost::ibackup/$IBACKUP_DEST --port $STUNNEL_PORT echo "Stopping stunnel for rsync..." /etc/init.d/stunnel4 stop echo -n "Cleaning up... " /bin/rm -rfv $DUMPDIR echo "done!"