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

Публикация № 1107512

Администрирование - Архивирование (backup)

22
Предлагаю использовать универсальный скрипт резервного копирования 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}
 

22

Скачать файлы

Наименование Файл Версия Размер
Универсальный скрипт резервного копирования Postgres (архивирует все базы сервера баз данных)
.sh 1,22Kb
13.08.19
1
.sh 1,22Kb 1

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. oldcopy 120 13.08.19 23:48 Сейчас в теме
Все хорошо, но только есть одно замечание:

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


Если вдруг что-то пойдет не так и копии перестанут делаться - то через некоторое время вы останетесь без бекапов вообще. На мой взгляд лучше оставлять N последних копий, чем копии за N последних дней.
AllexSoft; oninfostart; +2 Ответить
2. neyasytyf 14.08.19 10:41 Сейчас в теме
По этой ссылке есть информация для случаев когда конфигурация через pg_dump не выгружается.
3. premier 174 14.08.19 10:48 Сейчас в теме
(0) И ещё одно пожелание: перед созданием резервной копии выполнять очистку от "мусора" - /usr/bin/psql -d $dbname -c "VACUUM FULL ANALYZE;"
4. ametjan 14.08.19 18:20 Сейчас в теме
Если у вас маленькие базы, то вакуум фул не рентабельно, а если много и большие, то вместо скрипта юзать пора барман
Оставьте свое сообщение