Skip to content

Instantly share code, notes, and snippets.

@steverobbins
Last active September 14, 2016 00:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save steverobbins/17af3e16b2868f7510f0 to your computer and use it in GitHub Desktop.
Save steverobbins/17af3e16b2868f7510f0 to your computer and use it in GitHub Desktop.
#!/bin/bash
BUCKET=ellisonmagentobackups
TMPDIR=/mnt/shared/tmp
BACKUPITEMS="app erp errors media shell var wp"
DATESTAMP=`date +"%Y%m%d.%H%M%S"`
date
echo "Shared backup started"
cd "$TMPDIR/.."
for ITEM in $BACKUPITEMS; do
date
echo "Compressing $ITEM..."
tar -zcf "tmp/backup/shared.$ITEM.$DATESTAMP.tar.gz" "$ITEM" --exclude=cache --warning=no-file-changed
if [[ $? -ne 0 ]]; then
echo "An error occured while compressing shared dir $ITEM"
continue
fi
FILESIZE=$(wc -c < "tmp/backup/shared.$ITEM.$DATESTAMP.tar.gz")
if [[ $FILESIZE -lt 5368709120 ]]; then
aws s3api put-object --bucket "$BUCKET" --key "shared.$ITEM.$DATESTAMP.tar.gz" --body "tmp/backup/shared.$ITEM.$DATESTAMP.tar.gz"
rm -f "tmp/backup/shared.$ITEM.$DATESTAMP.tar.gz"
continue
fi
date
echo "Splitting $ITEM..."
split --bytes=5G "tmp/backup/shared.$ITEM.$DATESTAMP.tar.gz" "tmp/backup/shared.$ITEM.$DATESTAMP.tar.gz.part."
if [[ $? -ne 0 ]]; then
echo "An error occured while splitting $ITEM"
continue
fi
rm -f "tmp/backup/shared.$ITEM.$DATESTAMP.tar.gz"
date
echo "Starting multipart upload for $ITEM..."
UPLOADID=$(aws s3api create-multipart-upload --key "shared.$ITEM.$DATESTAMP.tar.gz" --bucket "$BUCKET" | grep -Po '"UploadId":.*?[^\\]",' | perl -pe 's/"UploadId": //; s/^"//; s/",$//')
echo "Upload ID is $UPLOADID"
STRUCTURE="Parts=["
PARTNO=1
for PART in `find "$TMPDIR" -name "shared.$ITEM.$DATESTAMP.tar.gz.part.*" | sort`; do
ETAG=$(aws s3api upload-part --bucket "$BUCKET" --key "shared.$ITEM.$DATESTAMP.tar.gz" --part-number="$PARTNO" --upload-id="$UPLOADID" --body "$PART" | grep -Po '[a-z0-9]{32}')
if [[ $? -ne 0 ]]; then
echo "Part upload $PART failed"
else
echo "Uploaded part $PART"
fi
rm -f "$PART"
STRUCTURE="${STRUCTURE}{ETag=$ETAG,PartNumber=$PARTNO},"
PARTNO=`expr $PARTNO + 1`
done
STRUCTURE="${STRUCTURE}]"
echo "$STRUCTURE"
aws s3api complete-multipart-upload --key "shared.$ITEM.$DATESTAMP.tar.gz" --bucket "$BUCKET" --upload-id="$UPLOADID" --multipart-upload "$STRUCTURE"
done
date
echo "Done"
exit 0
#!/bin/bash
BUCKET=ellisonmagentobackups
TMPDIR=/mnt/shared/tmp
DATESTAMP=`date +"%Y%m%d.%H%M%S"`
date
echo "MySQL backup started"
function query() {
mysql -s -N -e "$1"
}
DBS=`query "SHOW DATABASES"`
if [[ -z "$DBS" ]]; then
echo "No databases were found"
exit 1
fi
mkdir -p "$TMPDIR/backup"
cd "$TMPDIR/backup"
for DB in `echo "$DBS"`; do
date
echo "Backing up $DB"
mysqldump "$DB" --force --triggers --single-transaction --opt --skip-lock-tables > "$TMPDIR/backup/$DB.$DATESTAMP.sql"
date
echo "Compressing $DB..."
gzip "$TMPDIR/backup/$DB.$DATESTAMP.sql"
if [[ $? -ne 0 ]]; then
echo "An error occured while compressing $DB"
continue
fi
date
echo "Uploading $DB..."
aws s3api put-object --bucket "$BUCKET" --key "$DB.$DATESTAMP.sql.gz" --body "$TMPDIR/backup/$DB.$DATESTAMP.sql.gz"
if [[ $? -ne 0 ]]; then
echo "An error occured while uploading $DB to S3"
continue
fi
rm -f "$TMPDIR/backup/$DB.$DATESTAMP.sql.gz"
done
date
echo "Done"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment