Skip to content

Instantly share code, notes, and snippets.

@aelsharawi
Created January 7, 2018 20:56
Show Gist options
  • Save aelsharawi/efbd29be1c3da74c50d599d418f49cb8 to your computer and use it in GitHub Desktop.
Save aelsharawi/efbd29be1c3da74c50d599d418f49cb8 to your computer and use it in GitHub Desktop.
google drive backup
#define local path for backups
BACKUPPATH="/tmp/backups"
#define remote backup path
BACKUPPATHREM="wp"
#path to WordPress installations
SITESTORE="/home/nginx/domains"
#date prefix
DATEFORM=$(date +"%Y-%m-%d")
#Days to retain
DAYSKEEP=7
#blue color text
RCol='\e[0m' # Text Reset
# Regular Bold Underline High Intensity BoldHigh Intens Background High Intensity Backgrounds
Bla='\e[0;30m'; BBla='\e[1;30m'; UBla='\e[4;30m'; IBla='\e[0;90m'; BIBla='\e[1;90m'; On_Bla='\e[40m'; On_IBla='\e[0;100m';
Red='\e[0;31m'; BRed='\e[1;31m'; URed='\e[4;31m'; IRed='\e[0;91m'; BIRed='\e[1;91m'; On_Red='\e[41m'; On_IRed='\e[0;101m';
Gre='\e[0;32m'; BGre='\e[1;32m'; UGre='\e[4;32m'; IGre='\e[0;92m'; BIGre='\e[1;92m'; On_Gre='\e[42m'; On_IGre='\e[0;102m';
Yel='\e[0;33m'; BYel='\e[1;33m'; UYel='\e[4;33m'; IYel='\e[0;93m'; BIYel='\e[1;93m'; On_Yel='\e[43m'; On_IYel='\e[0;103m';
Blu='\e[0;34m'; BBlu='\e[1;34m'; UBlu='\e[4;34m'; IBlu='\e[0;94m'; BIBlu='\e[1;94m'; On_Blu='\e[44m'; On_IBlu='\e[0;104m';
Pur='\e[0;35m'; BPur='\e[1;35m'; UPur='\e[4;35m'; IPur='\e[0;95m'; BIPur='\e[1;95m'; On_Pur='\e[45m'; On_IPur='\e[0;105m';
Cya='\e[0;36m'; BCya='\e[1;36m'; UCya='\e[4;36m'; ICya='\e[0;96m'; BICya='\e[1;96m'; On_Cya='\e[46m'; On_ICya='\e[0;106m';
Whi='\e[0;37m'; BWhi='\e[1;37m'; UWhi='\e[4;37m'; IWhi='\e[0;97m'; BIWhi='\e[1;97m'; On_Whi='\e[47m'; On_IWhi='\e[0;107m';
#calculate days as filename prefix
DAYSKEPT=$(date +"%Y-%m-%d" -d "-$DAYSKEEP days")
#create array of sites based on folder names
# commentd to debug SITELIST=$(ls $SITESTORE)
SITELIST=($(ls -lh $SITESTORE | awk '{print $9}'))
for s in ${SITELIST[0]}; do echo -n "backup $s: "; echo "/home/nginx/${s}/public";done
#make sure the backup folder exists
mkdir -p $BACKUPPATH
#check remote backup folder exists on gdrive
echo -e "${Blu} check remote backup folder exists on gdrive";
BACKUPSID=$(gdrive list --no-header | grep $BACKUPPATHREM | grep dir | awk '{ print $1}')
if [ -z "$BACKUPSID" ]; then
gdrive mkdir $BACKUPPATHREM
BACKUPSID=$(gdrive list --no-header | grep $BACKUPPATHREM | grep dir | awk '{ print $1}')
fi
#start the loop
for s in ${SITELIST[@]}; do
#delete old backup, get folder id and delete if exist
echo -e "${Red} deleting old backup";
OLDBACKUP=$(gdrive list --no-header | grep $DAYSKEPT-$s | grep dir | awk '{ print $1}')
if [ ! -z "$OLDBACKUP" ]; then
gdrive delete $OLDBACKUP
fi
# create the local backup sub folder if it doesn't exist
echo -e "${gre} craeting local backup folder";
if [ ! -e $BACKUPPATH/$s ]; then
mkdir $BACKUPPATH/$s
fi
#entire the WordPress folder
echo -e "${yel} getting the full wordpress path";
cd $SITESTORE/$s/public
#back up the WordPress folder
echo -e "${gre}backup wordpress folder";
tar -czf $BACKUPPATH/$s/$DATEFORM-$s.tar.gz .
#back up the WordPress database, compress and clean up
echo -e "${yel} starting the wp-cli sql export";
#/usr/bin/wp db export $BACKUPPATH/$s/$DATEFORM-$s.sql --allow-root
cd $SITESTORE/$s/public
sudo /usr/bin/wp db --path=$SITESTORE/$s/public export $BACKUPPATH/$s/$DATEFORM-$s.sql --allow-root --skip-themes --skip-plugins
cat $BACKUPPATH/$s/$DATEFORM-$s.sql | gzip > $BACKUPPATH/$s/$DATEFORM-$s.sql.gz
rm $BACKUPPATH/$s/$DATEFORM-$s.sql
#get current folder ID
echo -e "${red} get google drive folder list";
SITEFOLDERID=$(gdrive list --no-header | grep $s | grep dir | awk '{ print $1}')
sleep 10
#create folder if doesn't exist
echo -e "${gre} create google drive folder if not present";
if [ -z "$SITEFOLDERID" ]; then
gdrive mkdir --parent $BACKUPSID $s
SITEFOLDERID=$(gdrive list --no-header | grep $s | grep dir | awk '{ print $1}')
fi
sleep 10
#upload WordPress tar
echo -e "${red} upload to google drive wordpress folder";
gdrive upload --parent $SITEFOLDERID --delete $BACKUPPATH/$s/$DATEFORM-$s.tar.gz
sleep 10
#upload wordpress database
echo -e "${gre} upload to google drive wordpress DB";
gdrive upload --parent $SITEFOLDERID --delete $BACKUPPATH/$s/$DATEFORM-$s.sql.gz
done
#Fix permissions
#sudo chown -R www-data:www-data $SITESTORE
#sudo find $SITESTORE -type f -exec chmod 644 {} +
#sudo find $SITESTORE -type d -exec chmod 755 {} +
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment