Created
March 16, 2017 12:38
-
-
Save WebFreak001/92ea69f17696c2bb3d376f318f63682a to your computer and use it in GitHub Desktop.
Backup website & mysql database
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
#!/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