Last active
January 19, 2020 20:24
-
-
Save erickvasilev/e9a04b212f4c310803a2adf69d6e46ae to your computer and use it in GitHub Desktop.
Percona Xtrabckup to S3 using S3cmd and AWS CLI version 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# This is my production backup script. | |
# https://sqlgossip.com | |
# taken from https://thedataguy.in/automation-script-for-percona-xtrabackup-full-incremental/ | |
# modified by erickvasilev | |
SHELL=/bin/bash | |
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | |
set -e | |
set -u | |
usage() { | |
echo "usage: $(basename $0) [option]" | |
echo "option=full: Perform Full Backup" | |
echo "option=incremental: Perform Incremental Backup" | |
echo "option=restore: Start to Restore! Be Careful!! " | |
echo "option=help: show this help" | |
} | |
full_backup() { | |
if [ ! -d $BACKUP_DIR ] | |
then | |
mkdir $BACKUP_DIR | |
fi | |
rm -rf $BACKUP_DIR/* | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Cleanup the backup folder is done" >> $BACKUP_DIR/xtrabackup.log | |
aws2 s3 rm s3://xeonmasterbackup --recursive | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Cleanup the S3 folder is done! Starting Full backup" >> $BACKUP_DIR/xtrabackup.log | |
xtrabackup --backup --target-dir=$BACKUP_DIR/FULL | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Backup Done!" >> $BACKUP_DIR/xtrabackup.log | |
s3cmd sync /home/masterbackup/ s3://xeonmasterbackup/ | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Backup has been uploaded to S3 - Done!" >> $BACKUP_DIR/xtrabackup.log | |
} | |
incremental_backup() | |
{ | |
if [ ! -d $BACKUP_DIR/FULL ] | |
then | |
echo "ERROR: Unable to find the FULL Backup. aborting....." | |
exit -1 | |
fi | |
if [ ! -f $BACKUP_DIR/last_incremental_number ]; then | |
NUMBER=1 | |
else | |
NUMBER=$(($(cat $BACKUP_DIR/last_incremental_number) + 1)) | |
fi | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Starting Incremental backup $NUMBER" >> $BACKUP_DIR/xtrabackup.log | |
if [ $NUMBER -eq 1 ] | |
then | |
xtrabackup --backup --incremental --target-dir=$BACKUP_DIR/inc$NUMBER --incremental-basedir=$BACKUP_DIR/FULL | |
else | |
xtrabackup --backup --incremental --target-dir=$BACKUP_DIR/inc$NUMBER --incremental-basedir=$BACKUP_DIR/inc$(($NUMBER - 1)) | |
fi | |
echo $NUMBER > $BACKUP_DIR/last_incremental_number | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Incremental Backup:$NUMBER done!" >> $BACKUP_DIR/xtrabackup.log | |
s3cmd sync /home/masterbackup/ --skip-existing --delete-removed s3://xeonmasterbackup/ | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Incremental Backup has been uploaded to S3 - Done!" >> $BACKUP_DIR/xtrabackup.log | |
} | |
restore() | |
{ | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Preparing FULL Backup ..." >> $BACKUP_DIR/xtrabackup-restore.log | |
xtrabackup --prepare --apply-log-only --target-dir=$BACKUP_DIR/FULL | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": FULL Backup Preparation Done!!!" >> $BACKUP_DIR/xtrabackup-restore.log | |
P=1 | |
while [ -d $BACKUP_DIR/inc$P ] && [ -d $BACKUP_DIR/inc$(($P+1)) ] | |
do | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Prepareing incremental:$P" >> $BACKUP_DIR/xtrabackup-restore.log | |
xtrabackup --prepare --apply-log-only --target-dir=$BACKUP_DIR/FULL --incremental-dir=$BACKUP_DIR/inc$P | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": incremental:$P Preparation Done!!!" >> $BACKUP_DIR/xtrabackup-restore.log | |
P=$(($P+1)) | |
done | |
if [ -d $BACKUP_DIR/inc$P ] | |
then | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Prepareing the last incremental:$P" >> $BACKUP_DIR/xtrabackup-restore.log | |
xtrabackup --prepare --target-dir=$BACKUP_DIR/FULL --incremental-dir=$BACKUP_DIR/inc$P | |
echo `date '+%Y-%m-%d %H:%M:%S:%s'`": Last incremental:$P Preparation Done!!!" >> $BACKUP_DIR/xtrabackup-restore.log | |
fi | |
} | |
## Parameters | |
BACKUP_DIR=/home/masterbackup | |
if [ $# -eq 0 ] | |
then | |
usage | |
exit 1 | |
fi | |
case $1 in | |
"full") | |
full_backup | |
;; | |
"incremental") | |
incremental_backup | |
;; | |
"restore") | |
restore | |
;; | |
"help") | |
usage | |
break | |
;; | |
*) echo "invalid option";; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment