Skip to content

Instantly share code, notes, and snippets.

@twentythousandphantoms
Created October 9, 2018 20:25
Show Gist options
  • Save twentythousandphantoms/ac898f5700e5999a34d6017b519b857b to your computer and use it in GitHub Desktop.
Save twentythousandphantoms/ac898f5700e5999a34d6017b519b857b to your computer and use it in GitHub Desktop.
#!/bin/bash
BUCKET=""
TMPDIR=/mnt/pgstorage-0/backup-tmp/
HOST=`hostname --fqdn`
DATE=`date +%Y-%m-%d`
MODE="7zip"
shopt -s expand_aliases
alias logger='logger -t s3_backup_rotate -p notice'
if [ ! -z "$BUCKET" ]; then
echo "set the S3 bucket first..." 1>&2;
exit 1
rm -rf $TMPDIR/*
cd $TMPDIR
if ! pg_dumpall --globals-only -U postgres | bzip2 > $HOST.$DATE.globals.bz2; then
echo "failed to dump globals, bailing out..." 1>&2;
exit 1
fi
for dbname in `psql template1 postgres -A -t -c 'select datname from pg_database'`; do
if [[ "$dbname" = "template0" ]]; then continue; fi;
if [[ "$dbname" = "template1" ]]; then continue; fi;
if [[ "$dbname" = "postgres" ]]; then continue; fi;
if ! pg_dump -Z0 -Fc -EUTF-8 -C -U postgres $dbname | 7z a dummy -tbzip2 -si -so > $HOST.$DATE.$dbname.pgdmp.bz2 2>/dev/null; then
echo "failed to dump $dbname, but trying to dump other dbs..." 1>&2;
fi
done
if ! s3cmd --acl-private --no-progress put $TMPDIR/* s3://$BUCKET/$HOST/$DATE/ >/dev/null ; then
echo "failed to store backups on s3, exiting..." 1>&2;
exit 1;
fi;
#backup rotation part
flist=`mktemp`
flist_ready=`mktemp`
trap "rm -f $flist $flist_ready" EXIT
s3cmd ls s3://$BUCKET/$HOST/ >$flist
if [ $? -ne 0 ]; then
echo "cannot get file list" 1>&2 ; exit 1
fi
filter='^.*('
for i in `seq 0 7`; do
n_days_ago=`date -d "$i day ago" +"%Y-%m-%d"`
filter="$filter$n_days_ago|"
done
filter="$filter[0-9]{4}-[0-9]{2}-15|[0-9]{4}-[0-9]{2}-01)/$"
logger "Remove filter: $filter"
egrep -v "$filter" $flist | awk '{print $2}' | sort > $flist_ready
logger "Backups to delete:"
cat $flist_ready | logger
logger "Removing:"
for obj in `cat $flist_ready`; do
s3cmd --recursive del $obj 2>&1 | logger
done
logger "Backup rotation complete"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment