Created
January 7, 2018 20:56
-
-
Save aelsharawi/efbd29be1c3da74c50d599d418f49cb8 to your computer and use it in GitHub Desktop.
google drive backup
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
#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