Skip to content

Instantly share code, notes, and snippets.

@WebFreak001
Created March 16, 2017 12:38
Show Gist options
  • Save WebFreak001/92ea69f17696c2bb3d376f318f63682a to your computer and use it in GitHub Desktop.
Save WebFreak001/92ea69f17696c2bb3d376f318f63682a to your computer and use it in GitHub Desktop.
Backup website & mysql database
#!/bin/sh
id=`date +%Y-%m-%d_%H-%M`
# Creates a backup of a website + database in a .tar.gz file
# Archive structure:
# db.sql
# website_folder/
# Name of backup
appname="mywebsite"
# Which folder to backup
backupfolder="/var/www/html/mywebsite"
# Where to temporarily store the backup in case something goes wrong
tmpbackup="/var/www/backup-$id"
# Where to upload the backup over scp. Leave blank to disable remote storage. For automatic backups make sure the remote server accepts connections from this machine without password (authorized_keys).
remote="pi@raspberry.backup.server:backups"
# Mysql user, password, database. Make sure user has mysqldump (lock tables, select) privileges on the database
mysql_user="root"
# Leave password blank to enter password on every backup
mysql_pass="mysql"
mysql_db="mywebsite"
# Local directory where to store backups
backups_dir="/root/backups"
if [ ! -d $backups_dir ]; then
echo "Creating backups directory"
mkdir -p $backups_dir
touch $backups_dir/log.txt
chmod 600 $backups_dir/log.txt
fi
echo "[$id] Starting Backup" >> $backups_dir/log.txt
echo "Backing up $appname into $tmpbackup"
echo "Remote destination: $remote"
echo "Starting backup in 3 seconds..."
sleep 3
mkdir $tmpbackup
cd $tmpbackup
if [ ! -d $tmpbackup ]; then
echo "[$id] Failed to create backup directory. No permissions?" >> $backups_dir/log.txt
echo "Failed to create backup destination folder, aborting"
exit 1
fi
echo "Stopping webserver"
service apache2 graceful-stop
echo "Exporting mysql..."
mysqldump -u $mysql_user -p$mysql_pass $mysql_db > db.sql
if [ ! "$?" = "0" ]; then
echo "[$id] Failed to dump mysql database" >> $backups_dir/log.txt
echo "Failed to export mysql database, aborting"
echo "Restarting apache"
service apache2 start
exit 1
fi
echo "Copying website..."
cp -r $backupfolder $tmpbackup/$appname
echo "Restarting webserver"
service apache2 start
echo "Compressing backup into $tmpbackup.tar.gz"
cd $tmpbackup
cd ..
tar -zcf $tmpbackup.tar.gz `basename $tmpbackup`
if [ ! -f $tmpbackup.tar.gz ]; then
echo "[$id] Failed to create archive" >> $backups_dir/log.txt
echo "Failed to compress, aborting"
exit 1
fi
echo "Securing backup"
chown root:root $tmpbackup.tar.gz
chmod 600 $tmpbackup.tar.gz
rm -rf $tmpbackup
mv $tmpbackup.tar.gz $backups_dir/$appname-$id.tar.gz
if [ ! -z "$remote" ]; then
echo "Uploading backup to $remote"
scp $backups_dir/$appname-$id.tar.gz $remote
fi
echo "Backup done (mysql, website)"
echo "Local archive: $backups_dir/$appname-$id.tar.gz"
echo "Remote archive: $remote/$appname-$id.tar.gz"
echo "[$id] Backup Done" >> $backups_dir/log.txt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment