This is a script I have developed to back up my hosting environment, and it actually consists of two. One to be started by cron, and then it starts the other. This allows for a modular setup between your environments (apache/nginx/etc).
The scripts:
backup.sh
#!/bin/bash
# Web Host Backup
# Cron Version
# Jim McKibben
# 2015-10-12
# Version .1
# Nova-Labs Export
# Timestamp Function
timestamp() {
date +"%Y-%m-%d_%H-%M-%S"
}
# Get the Hostname
HOST=`cat /etc/hostname`
# Make the File Stamp
VARFILESTAMP=$HOST"-"$(timestamp)
echo "Starting backup for "$VARFILESTAMP
# Maintenance Mode stuff
echo "Put Magento into maintenance mode"
echo "Magento is in maintenance mode"
mv /var/www/dc/maintenance.flag /var/www/dc/www/
rm -rf /var/www/dc/www/var/*
cd /root/backup/
. /root/backup/lampbackup.sh
echo "Compressing Sites Data to "$VARFILESTAMP"-sites.tar.bz2"
nice tar cfj "/var/"$VARFILESTAMP"-sites.tar.bz2" /var/www/
# Undo Maintenance Mode
echo "Put Magento back in production"
mv /var/www/dc/www/maintenance.flag /var/www/dc/
# Hash those files
md5sum /var/$VARFILESTAMP-sites.tar.bz2 > /var/$VARFILESTAMP-sites.md5
echo /var/$VARFILESTAMP-sites.md5
echo "Done"
lampbackup.sh
#!/bin/sh
# LAMP Prod Export
# Cron Version
# Jim McKibben
# 2015-08-03
# Version .1
# Takes most common LAMP setup files including DBs and exports them
# into usefully named .gz files with hostname and timestamp data
# Localize Path
WORKDIR="/root/backup/"
# Timestamp Function
timestamp() {
date +"%Y-%m-%d_%H-%M-%S"
}
# Get the Hostname
HOST=`cat /etc/hostname`
# Make the File Stamp
FILESTAMP=$WORKDIR""$HOST"-"$(timestamp)
# Set the MySQL Admin Root
MYSQLUSER='root'
# Get the MySQL Admin Password
#read -s -p "Enter Password: " MYSQLPASSWORD
# Set the MySQL Admin Password
MYSQLPASSWORD='XXXXXXXXX'
# Get a list of current databases
DBS=`sudo mysql -u $MYSQLUSER -p$MYSQLPASSWORD -A -e "show databases;"`
# Set list of admin databases
ADMINDBS="mysql columns_priv db host servers tables_priv user"
# Remove service related databases
DBS=${DBS//mysql}
DBS=${DBS//Database}
DBS=${DBS//information_schema}
DBS=${DBS//performance_schema}
echo "Exporting MySQL Prod Data to "$FILESTAMP"-mysqlproddata.sql.gz"
nice mysqldump -u $MYSQLUSER -p$MYSQLPASSWORD --databases $DBS | gzip > $FILESTAMP"-mysqlproddata.sql.gz"
echo "Exporting MySQL Admin Data to "$FILESTAMP"-mysqladmindata.sql.gz"
nice mysqldump -u $MYSQLUSER -p$MYSQLPASSWORD $ADMINDBS | gzip > $FILESTAMP"-mysqladmindata.sql.gz"
echo "Exporting MySQL Config Data to "$FILESTAMP"-mysqlconf.tar.gz"
tar cfz $FILESTAMP"-mysqlconf.tar.gz" /etc/mysql/
echo "Exporting Apache Sites Available Data to "$FILESTAMP"-apachesiteav.tar.gz"
tar cfz $FILESTAMP"-apachesiteav.tar.gz" /etc/apache2/sites-available/
echo "Exporting Apache Sites Enabled Data to "$FILESTAMP"-apachesiteen.tar.gz"
tar cfz $FILESTAMP"-apachesiteen.tar.gz" /etc/apache2/sites-enabled/
echo "Exporting Apache Mods Enabled Data to "$FILESTAMP"-apachesiteen.tar.gz"
tar cfz $FILESTAMP"-apachemoden.tar.gz" /etc/apache2/mods-enabled/
echo "Exporting SSL Data to "$FILESTAMP"-ssl.tar.gz"
tar cfz $FILESTAMP"-ssl.tar.gz" /etc/ssl/private/ /etc/ssl/crt/
echo "Compressing Prod DB and Apache Data to "$FILESTAMP"-backup.tar.bz2"
nice tar cfj $FILESTAMP"-dbandconfbackup.tar.bz2" /root/backup/
nice md5sum $FILESTAMP-dbandconfbackup.tar.bz2 > $FILESTAMP-dbandconfbackup.md5
echo "Done"
crontab
MAILTO="myemail@hostname.com" 0 1 * * 0 /root/backup/backup.sh

