Last active
June 20, 2020 02:12
-
-
Save yusufhm/7985b6aee1228db90289 to your computer and use it in GitHub Desktop.
Bash scripts to backup databases & files for Drupal sites. Adapted from scripts originally written by Joseph Chin.
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
#!/usr/bin/env bash | |
WEBSITES_ROOT=/var/www | |
BACKUP_ROOT=/var/backups/websites | |
# Checks to see if arguments are provided | |
if [ $2 ] | |
then | |
BUCKET=$2 | |
else | |
echo "Missing arguments. Format is 'db_backup.sh {website} {bucket}" | |
exit | |
fi | |
if [ $1 ] | |
then | |
WEBSITE=$1 | |
else | |
echo "Missing arguments. Format is 'db_backup.sh {website} {bucket}" | |
exit | |
fi | |
FOLDER=$WEBSITE"_db" | |
TIME_STAMP=`eval date +%Y%m%d-%H%M` | |
BACKUP_FILE=$BACKUP_ROOT/$WEBSITE'_'$TIME_STAMP'.sql' | |
BACKUP_FILE_S3=$BUCKET/$WEBSITE"_db"/$WEBSITE'_'$TIME_STAMP'.sql.gz' | |
echo $WEBSITE" backup started at "$TIME_STAMP | |
# PERFORM sqldump using drush | |
cd $WEBSITES_ROOT/$WEBSITE/php | |
echo "Performing MySQL Dump..." | |
drush sql-dump --gzip --result-file=$BACKUP_FILE | |
if [ $? -eq 0 ]; then | |
s3cmd -c /etc/.s3cfg put $BACKUP_FILE'.gz' $BACKUP_FILE_S3 | |
if [ $? -ne 0 ]; then | |
echo "Upload to S3 failed!" | |
else | |
rm $BACKUP_FILE'.gz' | |
fi | |
else | |
echo "sqldump failed!" | |
fi | |
END_TIME_STAMP=`eval date +%Y%m%d-%H%M` | |
echo $WEBSITE" backup finished at "$END_TIME_STAMP |
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
#!/usr/bin/env bash | |
WEBSITES_ROOT=/var/www | |
BACKUP_ROOT=/var/backups/websites | |
# Checks to see if arguments are provided | |
if [ $2 ] | |
then | |
BUCKET=$2 | |
else | |
echo "Missing arguments. Format is 'file_backup.sh {website} {bucket}" | |
exit | |
fi | |
if [ $1 ] | |
then | |
WEBSITE=$1 | |
else | |
echo "Missing arguments. Format is 'file_backup.sh {website} {bucket}" | |
exit | |
fi | |
TIME_STAMP=`eval date +%Y%m%d-%H%M` | |
DATE_MONTH=`eval date +%Y%m` | |
MONTHLY_FILE=$BACKUP_ROOT/$WEBSITE'_'$DATE_MONTH'.tar.gz' | |
MONTHLY_FILE_S3=$BUCKET/$WEBSITE"_files"/$WEBSITE'_'$DATE_MONTH'.tar.gz' | |
INCREMENTAL_FILE=$BACKUP_ROOT/$WEBSITE'_'$TIME_STAMP'.tar.gz' | |
INCREMENTAL_FILE_S3=$BUCKET/$WEBSITE"_files"/$WEBSITE'_'$TIME_STAMP'.tar.gz' | |
INCREMENTAL_SNAPSHOT_FILE=$BACKUP_ROOT/$WEBSITE'_'$DATE_MONTH'.snar' | |
INCREMENTAL_SNAPSHOT_FILE_S3=$BUCKET/$WEBSITE"_files"/$WEBSITE'_'$DATE_MONTH'.snar' | |
# if monthly file does not exist on S3, | |
# create full backup and upload it along with the incremental file | |
# else retrieve the snapshot file from S3, | |
# create the incremental file & upload | |
ONLINE_MONTHLY_FILE_S3=`s3cmd -c /etc/.s3cfg ls $MONTHLY_FILE_S3` | |
BACKUP_FILE='' | |
BACKUP_FILE_S3='' | |
if [ -z "$ONLINE_MONTHLY_FILE_S3" ]; then | |
echo 'Creating full monthly backup since none exists' | |
tar --create \ | |
--gzip \ | |
--file=$MONTHLY_FILE \ | |
--listed-incremental=$INCREMENTAL_SNAPSHOT_FILE \ | |
--dereference \ | |
$WEBSITES_ROOT/$WEBSITE/php/sites/default/files | |
if [ $? -eq 0 ]; then | |
BACKUP_FILE=$MONTHLY_FILE | |
BACKUP_FILE_S3=$MONTHLY_FILE_S3 | |
fi | |
else | |
echo 'Creating incremental backup since monthly already exists' | |
echo 'Downloading snapshot file from S3' | |
s3cmd -c /etc/.s3cfg get $INCREMENTAL_SNAPSHOT_FILE_S3 $INCREMENTAL_SNAPSHOT_FILE | |
if [ $? -eq 0 ]; then | |
tar --create \ | |
--gzip \ | |
--file=$INCREMENTAL_FILE \ | |
--listed-incremental=$INCREMENTAL_SNAPSHOT_FILE \ | |
--dereference \ | |
$WEBSITES_ROOT/$WEBSITE/php/sites/default/files | |
if [ $? -eq 0 ]; then | |
BACKUP_FILE=$INCREMENTAL_FILE | |
BACKUP_FILE_S3=$INCREMENTAL_FILE_S3 | |
fi | |
fi | |
fi | |
# if there's a backup file to upload, do it now | |
if [ -n $BACKUP_FILE ]; then | |
# upload backup file | |
echo 'Uploading backup file to S3' | |
s3cmd -c /etc/.s3cfg put $BACKUP_FILE $BACKUP_FILE_S3 | |
if [ $? -ne 0 ]; then | |
echo 'Upload to S3 failed; please upload manually to ensure backups are safe' | |
else | |
# upload snapshot file | |
echo 'Uploading snapshot file to S3' | |
s3cmd -c /etc/.s3cfg put $INCREMENTAL_SNAPSHOT_FILE $INCREMENTAL_SNAPSHOT_FILE_S3 | |
if [ $? -ne 0 ]; then | |
echo 'Could not upload snapshot file to S3' | |
else | |
# remove local files after all uploads are successful | |
rm $INCREMENTAL_SNAPSHOT_FILE | |
rm $BACKUP_FILE | |
fi | |
fi | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment