Created
June 26, 2017 06:15
-
-
Save janit/cf2f7e865fbb9a8e2ee36dc27456d097 to your computer and use it in GitHub Desktop.
Revisions
-
janit created this gist
Jun 26, 2017 .There are no files selected for viewing
This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,69 @@ #!/bin/bash # for use with cron, eg: # 0 3 * * * postgres /var/db/db_backup.sh foo_db if [[ -z "$1" ]]; then echo "Usage: $0 <db_name> [pg_dump args]" exit 1 fi DB="$1"; shift DUMP_ARGS=$@ DIR="/var/db/backups/$DB" KEEP_DAILY=7 KEEP_WEEKLY=5 KEEP_MONTHLY=12 function rotate { rotation=$1 fdate=`date +%Y-%m-%d -d $date` file=$DIR/daily/*$fdate*.gz mkdir -p $DIR/$rotation/ || abort if [ -f $file ]; then cp $file $DIR/$rotation/ || abort else echo fi } function prune { dir=$DIR/$1 keep=$2 ls $dir | sort -rn | awk " NR > $keep" | while read f; do rm $dir/$f; done } function abort { echo "aborting..." exit 1 } mkdir -p $DIR/daily || abort mkdir -p $DIR/weekly || abort mkdir -p $DIR/monthly || abort mkdir -p $DIR/yearly || abort date=`date +%Y-%m-%d` || abort day=`date -d $date +%d` || abort weekday=`date -d $date +%w` || abort month=`date -d $date +%m` || abort # Do the daily backup /usr/bin/pg_dump $DB $DUMP_ARGS | gzip > $DIR/daily/${DB}_$date.sql.gz test ${PIPESTATUS[0]} -eq 0 || abort # Perform rotations if [[ "$weekday" == "0" ]]; then rotate weekly fi if [[ "$day" == "01" ]]; then rotate monthly fi if [[ "$month/$day" == "01/01" ]]; then rotate yearly fi prune daily $KEEP_DAILY prune weekly $KEEP_WEEKLY prune monthly $KEEP_MONTHLY