mirror of
https://github.com/prodrigestivill/docker-postgres-backup-local.git
synced 2026-05-31 08:37:58 +00:00
69 lines
2.2 KiB
Bash
Executable File
69 lines
2.2 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
set -e
|
|
|
|
if [ "${POSTGRES_DB}" = "**None**" ]; then
|
|
echo "You need to set the POSTGRES_DB environment variable."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${POSTGRES_HOST}" = "**None**" ]; then
|
|
if [ -n "${POSTGRES_PORT_5432_TCP_ADDR}" ]; then
|
|
POSTGRES_HOST=$POSTGRES_PORT_5432_TCP_ADDR
|
|
POSTGRES_PORT=$POSTGRES_PORT_5432_TCP_PORT
|
|
else
|
|
echo "You need to set the POSTGRES_HOST environment variable."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "${POSTGRES_USER}" = "**None**" ]; then
|
|
echo "You need to set the POSTGRES_USER environment variable."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${POSTGRES_PASSWORD}" = "**None**" -a "${POSTGRES_PASSWORD_FILE}" = "**None**" ]; then
|
|
echo "You need to set the POSTGRES_PASSWORD environment variable or link to a container named POSTGRES."
|
|
exit 1
|
|
fi
|
|
|
|
#Proces vars
|
|
if [ "${POSTGRES_PASSWORD_FILE}" = "**None**" ]; then
|
|
export PGPASSWORD=$POSTGRES_PASSWORD
|
|
else if [ -r "${POSTGRES_PASSWORD_FILE}" ]; then
|
|
export PGPASSWORD=$(cat ${POSTGRES_PASSWORD_FILE})
|
|
else
|
|
echo "Missing POSTGRES_PASSWORD_FILE file."
|
|
exit 1
|
|
fi
|
|
POSTGRES_HOST_OPTS="-h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER $POSTGRES_EXTRA_OPTS"
|
|
KEEP_DAYS=$BACKUP_KEEP_DAYS
|
|
KEEP_WEEKS=`expr $((($BACKUP_KEEP_WEEKS * 7) + 1))`
|
|
KEEP_MONTHS=`expr $((($BACKUP_KEEP_MONTHS * 31) + 1))`
|
|
|
|
#Initialize dirs
|
|
mkdir -p "$BACKUP_DIR/daily/" "$BACKUP_DIR/weekly/" "$BACKUP_DIR/monthly/"
|
|
|
|
#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"
|
|
|
|
#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 '{}' ';'
|
|
find "$BACKUP_DIR/weekly" -maxdepth 1 -mtime +$KEEP_WEEKS -name "$POSTGRES_DB-*.sql*" -exec rm -rf '{}' ';'
|
|
find "$BACKUP_DIR/monthly" -maxdepth 1 -mtime +$KEEP_MONTHS -name "$POSTGRES_DB-*.sql*" -exec rm -rf '{}' ';'
|
|
|
|
echo "SQL backup uploaded successfully"
|