#!/bin/sh
# mysqlbackupper-custom.sh.
# This script is licensed under the General Public License ver. 2.0
# See http://www.gnu.org/licenses/gnu.txt for details.
# For bugs and suggestions mail to: hipo@pc-freak.net
# Post Notes 31.10.2011: added ionice -c 3 to prevent hdd overheads (ionice should be removed if script has to be used on *BSD)

################## Configure Here #################

# IP of the backup server where archives shall drop.
BACKUP_SERV_IP="207.234.147.191";

# path to the recent mysqldump binary.
MYSQLDUMP_BIN=/usr/local/mysql/bin/mysqldump;

# mysql dump options.
MYSQLDUMP_OPTS='--opt --all-databases -p';

# local backup dir location.
LOCAL_BACKUP_DIR=/root/.mysqldumps;

# remote backup dir location.
REMOTE_BACKUP_DIR=/backups/all;

# name of the machine ( included in the name of the created backups. )
MACHINE_NAME='fresh-up';

# recent backup file name.
RECENT_BACK=_last.bz2;

# path to the tsh client binary.
TSH_CLIENT_BIN=/usr/sbin/tsh-client;

# root password for the local mysql server.
MYSQL_PASS='tact1calneuRalImPl4antzZ';

# mode ( interactive|non-interactive, 1|0 )
INTERACTIVE=0;

####################################################



# If you edit something here you risk to make the script a crap.
TSH_CLIENT="$TSH_CLIENT_BIN $BACKUP_SERV_IP";

BACKUP_FILE_NAME=`date +%k_%d_%m_%Y|sed -e 's/^ *//'`.bz2;
# tsh upload parameters.
EXEC_CMD1="put $LOCAL_BACKUP_DIR/$MACHINE_NAME-$BACKUP_FILE_NAME $REMOTE_BACKUP_DIR";
EXEC_CMD2="put $LOCAL_BACKUP_DIR/$MACHINE_NAME$RECENT_BACK $REMOTE_BACKUP_DIR";
chk_variables_def () {

if [ -z "$BACKUP_SERV_IP" ] || [  -z "$MYSQLDUMP_BIN" ] ||\
[ -z "$MYSQLDUMP_OPTS" ] || [ -z "$LOCAL_BACKUP_DIR" ] ||\
[ -z "$REMOTE_BACKUP_DIR" ] || [ -z "$RECENT_BACK" ] ||\
[ -z "$TSH_CLIENT_BIN" ] || [ -z "$MACHINE_NAME" ] ||\
[ -z "$MYSQL_PASS" ] || [ -z "$INTERACTIVE" ]; then
echo "Missing Variable !!! Fatal Error occured !" >> /var/log/mysqlbackupper-fatal.log;
exit 1;
fi

}




# checks for local backup dir existence else create it.
chk_local_backup_dir_existence () {
if [ $INTERACTIVE -ne 0 ]; then

echo "Checking for local $LOCAL_BACKUP_DIR existence ..";

fi

if [ ! -d $LOCAL_BACKUP_DIR ]; then

mkdir $LOCAL_BACKUP_DIR;

fi

}


# create backups func.
create_mysql_backup () {

if [ $INTERACTIVE -ne 0 ]; then

echo "Creating Mysql dump and archiving it's content ...";

fi

ionice -c 3 nice -n 10 $MYSQLDUMP_BIN $MYSQLDUMP_OPTS$MYSQL_PASS | nice -n 5 bzip2 -9 > $LOCAL_BACKUP_DIR/$MACHINE_NAME-$BACKUP_FILE_NAME;
chmod 700 $LOCAL_BACKUP_DIR/$MACHINE_NAME-$BACKUP_FILE_NAME;
ionice -c 3 nice -n 5 cp $LOCAL_BACKUP_DIR/$MACHINE_NAME-$BACKUP_FILE_NAME $LOCAL_BACKUP_DIR/$MACHINE_NAME$RECENT_BACK;


#echo $PASS, $BACKUP_FILE_NAME;
#echo "$MYSQLDUMP_BIN $MYSQLDUMP_OPTS$PASS | bzip2 -9 | tee $LOCAL_BACKUP_DIR/_last.bz2 > $BACKUP_FILE_NAME";

}

chk_rem_backup_dir_existence () {
if [ $INTERACTIVE -ne 0 ]; then

echo "Checking for remote: $REMOTE_BACKUP_DIR existence ...";

fi

$TSH_CLIENT `echo "if [ ! -d $REMOTE_BACKUP_DIR ]; then \
mkdir -p $REMOTE_BACKUP_DIR\
fi\""`;

}


# upload .bz2 archives func.
upload_backup () {

if [ $INTERACTIVE -ne 0 ]; then

echo "Putting The backupped archives into remote: $REMOTE_BACKUP_DIR ...";

$TSH_CLIENT $EXEC_CMD1;
$TSH_CLIENT $EXEC_CMD2;

else

$TSH_CLIENT $EXEC_CMD1 &>/dev/null;
$TSH_CLIENT $EXEC_CMD2 &>/dev/null;

fi

}

# Main function.
main () {

chk_variables_def;
chk_local_backup_dir_existence;
create_mysql_backup;
chk_rem_backup_dir_existence;
upload_backup;

}

main;
