142 lines
4.2 KiB
Bash
142 lines
4.2 KiB
Bash
#######################
|
|
# THE BACKUP FUNCTION #
|
|
#######################
|
|
|
|
function backup() {
|
|
|
|
POSIT=()
|
|
while [[ $# -gt 0 ]]; do
|
|
KEY="$1"
|
|
case $KEY in
|
|
-n|--no-compress) NOCOMPRESS="yes" ;;
|
|
-d|--delete-old) DELETEOLD="yes" ;;
|
|
-s|--skip-uploads) SKIPUPLOADS="yes" ;;
|
|
-p|--path) DESTDIR="$2" ; shift ;;
|
|
*) echo "$1 not implemented" ; POSIT+=("$1") ;;
|
|
esac
|
|
shift
|
|
done
|
|
set -- "${POSIT[@]}"
|
|
|
|
DELETEOLD="${DELETEOLD:-no}"
|
|
SKIPUPLOADS="${SKIPUPLOADS:-no}"
|
|
DESTDIR="${DESTDIR:-`pwd`}"
|
|
|
|
[ -f ${DESTDIR}/wp-config.php ] || echo "this isn't a wordpress installation"
|
|
[ -f ${DESTDIR}/wp-config.php ] || exit 1
|
|
|
|
local DATETIME=`date +%Y%m%d.%H%M`
|
|
|
|
echo "==WPM BACKUP CALLED ON $DATETIME WITH VERSION $WPMVERSION==" | tee -a $LOGFILE
|
|
echo "==UNIQUE IDENTIFIER $INSTANCEID==" | tee -a $LOGFILE
|
|
echo "==$INSTANCEID==Executing backup on $DESTDIR" >> $LOGFILE
|
|
|
|
cd $DESTDIR
|
|
|
|
local NAME=`echo $DESTDIR | rev | cut -d '/' -f 1 | rev`
|
|
|
|
if [ "$NAME" == "" ] || [ ${#NAME} -lt 3 ] || [ "$NAME" == "html" ]; then
|
|
NAME=`hostname -f`
|
|
fi
|
|
|
|
echo "==$INSTANCEID==The name is ${NAME}" | tee -a $LOGFILE
|
|
|
|
local DBNAME=`grep DB_NAME wp-config.php | awk -F "'" '{print $4}'`
|
|
echo "==$INSTANCEID==The DB name is ${DBNAME}" | tee -a $LOGFILE
|
|
|
|
if mysql "${DBNAME}" >/dev/null 2>&1 </dev/null; then
|
|
echo "==$INSTANCEID==${DBNAME} exists (and I have permission to access it)" | tee -a $LOGFILE
|
|
else
|
|
echo "==$INSTANCEID==${DBNAME} doesn't exist or I lack access, terminating" | tee -a $LOGFILE
|
|
exit 1
|
|
fi
|
|
|
|
echo "==$INSTANCEID==Starting the DB dump" | tee -a $LOGFILE
|
|
try mysqldump $DBNAME --single-transaction > $TEMPDIR/${DBNAME}.${DATETIME}.sql
|
|
echo "==$INSTANCEID==The database dump is complete." | tee -a $LOGFILE
|
|
|
|
if [ "$BACKUPPATH" == "PARENTOFGIVEN" ]; then
|
|
BACKUPPATH=`dirname $DESTDIR`
|
|
DELETEOLD="no"
|
|
fi
|
|
|
|
if [ "$DELETEOLD" == "yes" ]; then
|
|
try find $BACKUPPATH -mtime +1 -type f -exec rm -fv '{}' \;;
|
|
echo "==$INSTANCEID==removed old backups" | tee -a $LOGFILE;
|
|
fi
|
|
|
|
if [[ "${SKIPUPLOADS}" == "no" ]]; then
|
|
local SF=`echo $(($(stat -f --format="%a*%S" .)))`;
|
|
local SN=`du -sb .|awk '{print $1}'`;
|
|
local SB=${SN}
|
|
local SN=`echo $(($SN + $SN))`;
|
|
if [ $SF -gt $SN ]; then
|
|
echo "==$INSTANCEID==Adequate free space detected" | tee -a $LOGFILE
|
|
else
|
|
echo "==$INSTANCEID==Insufficient space available. Terminating" | tee -a $LOGFILE
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "==$INSTANCEID==Starting archive creation" | tee -a $LOGFILE
|
|
|
|
[ `which xz` ] && COMPRESSOR="xz"
|
|
[ `which pv` ] && PROGRESS="pv"
|
|
|
|
if [ "$PROGRESS" == "pv" ]; then
|
|
TAROPTIONS="cf"
|
|
INTERPRED="pv -per -s${SB} |"
|
|
else
|
|
TAROPTIONS="cfv"
|
|
INTERPRED=""
|
|
fi
|
|
|
|
if [ "$SKIPUPLOADS" == "yes" ]; then
|
|
EXCLUDES="--exclude-tag=tagfile --exclude-vcs --exclude-backups"
|
|
else
|
|
EXCLUDES="--exclude-vcs --exclude-backups"
|
|
fi
|
|
|
|
if [ -d $DESTDIR/wp-content/uploads ]; then
|
|
touch $DESTDIR/wp-content/uploads/tagfile
|
|
fi
|
|
|
|
MEMORY=$( echo $((`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`/1024)) )
|
|
if [[ $MEMORY -lt 1152 ]]; then
|
|
NOCOMPRESS="yes"
|
|
else
|
|
NOCOMPRESS="${NOCOMPRESS:-no}"
|
|
fi
|
|
|
|
if [ "$NOCOMPRESS" == "yes" ]; then
|
|
if [ "$COMPRESSOR" == "xz" ]; then
|
|
PRED="xz -0 > $BACKUPPATH/$NAME.$DATETIME.tar.xz"
|
|
else
|
|
PRED="gzip -1 > $BACKUPPATH/$NAME.$DATETIME.tar.gz"
|
|
fi
|
|
else
|
|
if [ "$COMPRESSOR" == "xz" ]; then
|
|
PRED="xz -9 > $BACKUPPATH/$NAME.$DATETIME.tar.xz"
|
|
else
|
|
PRED="gzip -9 > $BACKUPPATH/$NAME.$DATETIME.tar.gz"
|
|
fi
|
|
fi
|
|
|
|
[ `which getfacl` ] && getfacl -R `pwd` > .permissions_backup.${DATETIME}
|
|
[ `which getfacl` ] && echo "==$INSTANCEID==Permissions backup completed." | tee -a $LOGFILE
|
|
[ `which getfacl` ] && echo "==$INSTANCEID==Restore with setfacl --restore=${DESTDIR}/.permissions_backup.${DATETIME}" | tee -a $LOGFILE
|
|
|
|
CMD="try tar $TAROPTIONS - $EXCLUDES --transform=\"flags=r;s|^|$DATETIME/|\" --show-transformed * $TEMPDIR/$DBNAME.$DATETIME.sql | $INTERPRED $PRED"
|
|
|
|
eval $CMD
|
|
|
|
rm -f $TEMPDIR/$DBNAME.$DATETIME.sql
|
|
|
|
if [ -f $DESTDIR/wp-content/uploads/tagfile ]; then
|
|
rm -f $DESTDIR/wp-content/uploads/tagfile
|
|
fi
|
|
|
|
echo "==$INSTANCEID==The archive is available at $BACKUPPATH/$NAME.$DATETIME.tar.xz"
|
|
|
|
} # END BACKUP
|