Универсальный скрипт резервного копирования Postgres, архивирует все базы сервера баз данных

Предлагаю использовать универсальный скрипт резервного копирования Postgres, архивирует все базы сервера баз данных, архивируются все добавленные базы, ведется лог архивирования, контролируется глубина архива. Скрипт тестировался на PostgreSQL 10.5 CentOS Linux release 7.6.1810

Скрипт тестировался на PostgreSQL 10.5 CentOS Linux release 7.6.1810

 

Текст скрипта:

 

#!/bin/sh
#Export postgres connection parameters
source /usr/local/etc/pgsql_funcs.conf

DATA=`date +"%Y-%m-%d_%H-%M"`
DATEFMT="%Y-%m-%d_%H-%M-%S"
GETDB="select datname from pg_database where datistemplate = ‘f’;"
SERVICELOG="/home/postgres/BACKUP/service.log"
BACKUPPATH="/home/postgres/BACKUP/files"
COUNT=0
TOTALCOUNT=0

echo "Start execution of backup databases script at ${DATA}" #>> ${SERVICELOG}

RESULT=$(/usr/bin/psql -h $PGHOST -p $PGPORT -U $PGROLE -d $PGDATABASE -t -c "${GETDB}" 2>&1)
if [ $? -ne 0 ]; then
    echo "${RESULT}"
    exit
fi

for dbname in ${RESULT}; do
  TOTALCOUNT=$[$TOTALCOUNT +1]
  echo "`date +${DATEFMT}` Start backup ${dbname}" #>> ${SERVICELOG}
  /usr/bin/pg_dump -U $PGROLE ${dbname}| pigz > $BACKUPPATH/$DATA-${dbname}.sql.gz 2>&1
  if [ $? -ne 0 ]; then
    echo "Failed to backup ${dbname}" #>> ${SERVICELOG}
    continue
  else  
    echo "`date +${DATEFMT}` End backup ${dbname}" #>> ${SERVICELOG}
    COUNT=$[$COUNT +1]
  fi  
done    

/usr/bin/find $BACKUPPATH -type f -mtime +20 -exec echo "Removing outdated backup file: {}" ; -exec rm -f {} ;

echo "End execution of backup databases script at `date +${DATEFMT}`" #>> ${SERVICELOG}
echo "${COUNT} of ${TOTALCOUNT} databases backed up" #>> ${SERVICELOG}
 

4 Comments

  1. oldcopy

    Все хорошо, но только есть одно замечание:

    /usr/bin/find $BACKUPPATH -type f -mtime +20 -exec echo «Removing outdated backup file: {}» ; -exec rm -f {} ;

    Если вдруг что-то пойдет не так и копии перестанут делаться — то через некоторое время вы останетесь без бекапов вообще. На мой взгляд лучше оставлять N последних копий, чем копии за N последних дней.

    Reply
  2. neyasytyf

    По этой ссылке есть информация для случаев когда конфигурация через pg_dump не выгружается.

    Reply
  3. premierex

    (0) И ещё одно пожелание: перед созданием резервной копии выполнять очистку от «мусора» — /usr/bin/psql -d $dbname -c «VACUUM FULL ANALYZE;»

    Reply
  4. ametjan

    Если у вас маленькие базы, то вакуум фул не рентабельно, а если много и большие, то вместо скрипта юзать пора барман

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *