From b74f2182d98a8c8e0e88c9d7fb4d2c52c72c0edf Mon Sep 17 00:00:00 2001 From: Pau Rodriguez-Estivill Date: Sat, 30 Jun 2018 14:07:22 +0200 Subject: [PATCH] Added support for multiple databases. Closes #1 --- README.md | 1 + backup.sh | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 34f763d..e198375 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ Backup PostgresSQL to local filesystem with periodic backups and rotate backups. Based on [schickling/postgres-backup-s3](https://hub.docker.com/r/schickling/postgres-backup-s3/). +It can backup multiple databases from the same host by setting all databases in `POSTGRES_DB` separated by comas or spaces. ## Usage diff --git a/backup.sh b/backup.sh index 3d5d96f..0fe31af 100755 --- a/backup.sh +++ b/backup.sh @@ -34,19 +34,24 @@ KEEP_DAYS=$BACKUP_KEEP_DAYS KEEP_WEEKS=`expr $((($BACKUP_KEEP_WEEKS * 7) + 1))` KEEP_MONTHS=`expr $((($BACKUP_KEEP_MONTHS * 31) + 1))` -#Initialize filename vers and dirs -DFILE="$BACKUP_DIR/daily/$POSTGRES_DB-`date +%Y%m%d-%H%M%S`.sql.gz" -WFILE="$BACKUP_DIR/weekly/$POSTGRES_DB-`date +%G%V`.sql.gz" -MFILE="$BACKUP_DIR/monthly/$POSTGRES_DB-`date +%Y%m`.sql.gz" +#Initialize dirs mkdir -p "$BACKUP_DIR/daily/" "$BACKUP_DIR/weekly/" "$BACKUP_DIR/monthly/" -#Create dump -echo "Creating dump of ${POSTGRES_DB} database from ${POSTGRES_HOST}..." -pg_dump -f "$DFILE" $POSTGRES_HOST_OPTS $POSTGRES_DB +#Loop all databases +for DB in $(echo $POSTGRES_DB | tr , " "); do + #Initialize filename vers + DFILE="$BACKUP_DIR/daily/$DB-`date +%Y%m%d-%H%M%S`.sql.gz" + WFILE="$BACKUP_DIR/weekly/$DB-`date +%G%V`.sql.gz" + MFILE="$BACKUP_DIR/monthly/$DB-`date +%Y%m`.sql.gz" -#Copy (hardlink) for each entry -ln -vf "$DFILE" "$WFILE" -ln -vf "$DFILE" "$MFILE" + #Create dump + echo "Creating dump of ${DB} database from ${POSTGRES_HOST}..." + pg_dump -f "$DFILE" $POSTGRES_HOST_OPTS $DB + + #Copy (hardlink) for each entry + ln -vf "$DFILE" "$WFILE" + ln -vf "$DFILE" "$MFILE" +done #Clean old files find "$BACKUP_DIR/daily" -maxdepth 1 -mtime +$KEEP_DAYS -name "$POSTGRES_DB-*.sql*" -exec rm -rf '{}' ';'