MySQLdump Remote Backup Script

  Tools


#!/bin/bash
# IPSERVERONE MySQL Remote Backup

set -x

NOTIFY_EMAIL="khairul@ipserverone.com, support@ipserverone.com"
DEST_IP="XX.XX.XX.XX" # Backup Server WAN
DEST_PRIVATE_IP="XX.XX.XX.XX" # Backup Server LAN
DEST_LOGIN="xx" # username
DEST_PATH="xx" # partition

CLIENT_SERVER_NAME="$DEST_LOGIN.small-dns.com" # server name

# Telegram Bot Token and Group ID
TELEGRAM_TOKEN="391514041:AAEvDNkJE5kVbD8upwq3gHvyUV6NbaRP5rk"
TELEGRAM_GROUP="-173985167"

xPreviousBackupDate=`date --date="now + -7 days" +%Y-%m-%d`
xDate=`date +%Y-%m-%d`

START_TIME=`date "+%F %T"`
echo $START_TIME > /ips1/start.time
touch /ips1/mysqldump.pid

ssh -p 9321 $DEST_LOGIN@$DEST_PRIVATE_IP "

mkdir /$DEST_PATH/$DEST_LOGIN/mysql/$xDate
echo $xDate > /$DEST_PATH/$DEST_LOGIN/mysql/$xDate/mysqldump.pid
rm -Rf /$DEST_PATH/$DEST_LOGIN/mysql/$xPreviousBackupDate

"

USER="da_admin"
PASSWD=`cat /usr/local/directadmin/conf/mysql.conf |grep pass |awk -F'=' {'print$2'}`

databases=` mysql --user=$USER --password=$PASSWD -e "SHOW DATABASES;" | tr -d "| " |grep -v Database`

for db in $databases;

do

echo $db
mysqldump --opt --skip-lock-tables --user=$USER --password=$PASSWD --databases $db | gzip -f | ssh -p 9321 $DEST_LOGIN@$DEST_PRIVATE_IP "cat > /$DEST_PATH/$DEST_LOGIN/mysql/$xDate/$db.sql.gz"

done

END_TIME=`date "+%F %T"`
echo $END_TIME > /ips1/end.time

# Check latest backup date at destination server
ssh $DEST_PRIVATE_IP -p 9321 -l $DEST_LOGIN "cat /$DEST_PATH/$DEST_LOGIN/mysql/$xDate/mysqldump.pid" > /ips1/backup_date.tmp

bDate=$( cat /ips1/backup_date.tmp )

if [ "$xDate" == "$bDate" ]

then

echo "Backup Success!"

else

echo "Backup Failed!"

/usr/bin/curl -s -X POST https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage -d chat_id=$TELEGRAM_GROUP -d text="MySQL Backup for $CLIENT_SERVER_NAME Failed"

echo -e "From: $DEST_LOGIN@small-dns.com\nTo: $NOTIFY_EMAIL\nSubject: MySQL Backup for $CLIENT_SERVER_NAME Failed\n\nMySQL Backup for $CLIENT_SERVER_NAME Failed" | /usr/sbin/sendmail $NOTIFY_EMAIL

fi

rm -f /ips1/start.time /ips1/end.time /ips1/backup_date.tmp /ips1/mysqldump.pid

exit 0