@@ -0,0 +1,76 @@
#! /usr/bin/env bash
# WP-CLI Back up Script to Amazon S3
# Source: https://www.jonathan.vc
# Author: Jonathan Dingman
# Adapted from Mike at WP Bullet
# define local path for backups
BACKUPPATH=/tmp/backups
# path to WordPress installations
SITESBASE=/var/www
# S3 bucket
S3DIR=" s3://yourbucketname"
# date prefix
DATEFORM=$( date +" %Y-%m-%d" )
# Days to retain
DAYSKEEP=7
# Alternate DB Host - useful if you have a high availability setup and want to leverage a read-only user, instead of the Writer.
ALTDBHOST=" yourdatabase.rds.amazonaws.com" # completely optional, in my use-case, it made sense.
# calculate days as filename prefix
DAYSKEPT=$( date +" %Y-%m-%d" -d " -$DAYSKEEP days" )
# Create array() of domains listed in $SITESBASE
SITELIST=()
for DIR in " $SITESBASE " /* / ; do
DIR2=${DIR%/ } # Remove the trailing /
DIR3=${DIR2##*/ } # Remove everything up to, and including, the last /
if [[ ${DIR3} = * " ." * ]]; then # Only add strings that have a period in them (ex: domain names)
SITELIST+=( " $DIR3 " )
fi
done
# make sure the backup folder exists
mkdir -p " $BACKUPPATH "
# start the loop
for SITE in " ${SITELIST[@]} " ; do
cd " $SITESBASE /$SITE /htdocs" || exit
if [ ! -e " $BACKUPPATH /$SITE " ]; then
mkdir " $BACKUPPATH /$SITE "
fi
tar -czf " $BACKUPPATH /$SITE /$DATEFORM -$SITE .tar.gz" -C " $SITESBASE /$SITE " .
wp db export " $BACKUPPATH /$SITE /$DATEFORM -$SITE " .sql \
--host=" $ALTDBHOST " \
--path=" $SITESBASE /$SITE /htdocs" \
--single-transaction \
--quick \
--lock-tables=false \
--allow-root \
--skip-themes \
--skip-plugins
< " $BACKUPPATH /$SITE /$DATEFORM -$SITE " .sql gzip > " $BACKUPPATH /$SITE /$DATEFORM -$SITE " .sql.gz
rm " $BACKUPPATH /$SITE /$DATEFORM -$SITE " .sql
S3DIRUP=" $S3DIR /$SITE /$DATE "
aws s3 mv " $BACKUPPATH /$SITE /$DATEFORM -$SITE " .tar.gz " $S3DIRUP "
aws s3 mv " $BACKUPPATH /$SITE /$DATEFORM -$SITE " .sql.gz " $S3DIRUP "
# delete old backups
S3REM=" $S3DIR /"
aws s3 rm " $S3REM /$DAYSKEPT "
done
# if you want to delete all local backups
# rm -rf "${BACKUPPATH:?}/*"
# delete old backups locally over DAYSKEEP days old
# find "$BACKUPPATH" -type d -mtime +$DAYSKEEP -exec rm -rf {} \;