Saturday, 27 February 2016

Bash script to backup mysql databases rotationaly

#!/bin/sh

#############################################################
# File:         dbbackup.sh
# Description:  A shell script to backup all mysql databases
# Cron Example: 0 2 * * * sh /path/to/dbbackup.sh
#############################################################

####DEFINE THESE#############################################
USER="root"
PASSWORD="mysqlpass"
SCPTOREMOTE=0;
REMOTESERVER="192.168.0.0";
REMOTEDIR="/backup";
DUMPBASEDIR="/opt/backup";
####END CHANGE HERE###########################################

MYSQLDUMP=`which mysqldump`
MYSQL=`which mysql`
LOOK=`which find`
DATE=`/bin/date +%d-%b-%Y`;
DELDIR=`/bin/date -d "-7 day" +%d-%b-%Y`;
DUMPDIR="$DUMPBASEDIR/$DATE";

if [ ! -d $DUMPDIR ];
then
        echo "Creating Directory: ".$DUMPDIR;
        mkdir $DUMPDIR;
fi

# get a list of databases
databases=`$MYSQL --user=$USER --password=$PASSWORD \
 -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

# dump each database in turn
for db in $databases; do
    echo "Database $db Backup Started";
    $MYSQLDUMP --single-transaction --events --force --opt --user=$USER --password=$PASSWORD \
    --databases $db > "$DUMPDIR/$db.bak"
    echo "Database $db Backup Completed";
done

if [ $SCPTOREMOTE -eq "1" ]
then
        echo "Backing up data to remote server";
        scp -r $DUMPDIR $REMOTESERVER:$REMOTEDIR
fi
echo "Done";

if [ ! -d $DELDIR ];
then
    echo "No directory with name: $DELDIR"
    echo "exiting....."
    exit 1;
else
    echo "Deleting Backup Of Date : $DELDIR"
    $LOOK $DUMPBASEDIR -type d -name $DELDIR -exec rm -rf {} \; 2>/dev/null
    echo "Backup Deleted Successfully...!"
    exit 0;
fi

exit;

No comments: