#!/bin/bash
# Ryan Lewis
# April 22, 2006
# sql-backup: create sql backups for selected databases
# == USER CONFIGURABLE == #
# SQL HOSTNAME
HOST="localhost"
# SQL USERNAME
UN=""
# SQL PASSWORD
PW=""
# DATABASES TO BACKUP
# DB_NAMES="db1 db2 db3"
DB_NAMES=""
# BACKUP DESTINATION
BACKUP_DIR="/backup/dir"
# BACKUP FOLDER
FOLDER="folder"
# COMPRESSION
# gzip, bzip2, or none
COMP="bzip2"
# DATE FORMAT
# Default Ex. 10-11-2006_14h59m
DATE=`date +%m-%d-%Y_%Hh%Mm`
# EMAIL BACKUPS?
EMAIL="yes"
# SEND-TO ADDRESS
TO=""
# SUBJECT
SUB="backup - $DATE"
# == END == #
# Mount Testing
MNT_INFO=$(mount | awk -v mnt=$BACKUP_DIR '{ if ($3 == mnt) print $0 }')
if [ "$MNT_INFO" == "" ]; then
echo "";
echo "--------------------------------------------------"
echo "ERROR:" $BACKUP_DIR " is not mounted."
echo " Please mount before continuing."
echo "--------------------------------------------------"
echo "";
exit 1;
fi
# Folder testing
if [ -d $BACKUP_DIR/$FOLDER ]; then
echo ""
echo "--------------------------------------------------"
else
echo ""
echo "--------------------------------------------------"
echo "$FOLDER does not exist, creating it"
echo "--------------------------------------------------"
MKDIR=`which mkdir`
$MKDIR $BACKUP_DIR/$FOLDER
fi
# Backup function
backup () {
mysqldump --user=$UN --password=$PW --host=$HOST $1 > $2
return 0
}
# Compress function
compress () {
EXTEN=""
if [ "$COMP" = "gzip" ]; then
gzip -f "$1"
EXTEN=".gz"
echo "gzip compression done"
echo "--------------------------------------------------"
elif [ "$COMP" = "bzip2" ]; then
bzip2 -f $1
EXTEN=".bz2"
echo "bzip2 compression done"
echo "--------------------------------------------------"
else
echo "no compression"
echo "--------------------------------------------------"
fi
return 0
}
# Backup the databases
MYSQL=`which mysql`
RM=`which rm`
BACKUP_FILES=""
# Leave only one backup in the folder
cd $BACKUP_DIR/$FOLDER
$RM -rf *
for DB in $DB_NAMES
do
echo "backing up the "$DB" database"
echo "--------------------------------------------------"
backup "$DB" "$BACKUP_DIR/$FOLDER/${DB}_$DATE.sql"
compress "$BACKUP_DIR/$FOLDER/${DB}_$DATE.sql"
BACKUP_FILES="$BACKUP_FILES $BACKUP_DIR/$FOLDER/${DB}_$DATE.sql$EXTEN"
done
# Email the backups as attachments
if [ "$EMAIL" = "yes" ]; then
MUTT=`which mutt`
echo "$BACKUP_FILES" > backup_content
BACKUP_FILES=`echo "$BACKUP_FILES" | sed -e "s# # -a #g"`
$MUTT -s "$SUB" $BACKUP_FILES $TO < backup_content
echo "emailed backups to $TO"
echo "--------------------------------------------------"
rm -f backup_content
fi
echo ""