MySQL Backup Script

From wikidb
Jump to: navigation, search

#!/bin/bash
# Number of days to keep backups
DAYS=7
# List of databases to back up
DBS=(crowlivia wikidb gallery)
# Who to email when it fails
EMAIL=epp@zdome.net
EMAILFROM=noreply@localhost

# Perform the backup...
DATE=$(date -u '+%Y%m%dT%H%M')
BACKUPDIR=~/dbbackup/dbbackups/
TEMP=$BACKUPDIR/tmp.sql.gz
for DB in ${DBS[@]}
do
    DBDIR=$BACKUPDIR/$DB
    if [[ ! -d $DBDIR ]]
    then
	mkdir $DBDIR
    fi
    # You'll notice that the password is not specified here.
    # The password for the MySQL root account is specified
    # in ~/.my.cnf.
    # This way, it won't show up when other users run "ps".
    mysqldump -u root $DB | gzip > $TEMP
    if [[ "$?" -ne 0 ]]
    then
	echo "Backup of database $DB failed."
	mailx -s "MySQL backup failure" "$EMAIL" -S from="$EMAILFROM" <<EOF
MySQL backup failed.
Database: $DB
Time: $DATE (UTC)
EOF
	rm $TEMP
    else
	# Delete old backups, but only if we succeeded at creating
	# a new one.
	find $DBDIR -mtime +$DAYS -delete
	mv $TEMP $DBDIR/$DB-$DATE.sql.gz
    fi
done