Найти тему
El Vinto

1C Postgre SQL бэкап и восстановление баз данных

Для Ubuntu 22.04.

Для начала необходимо создать файл скрипта /etc/snake-backup-script по бэкапированию со следующим содержимым:

#!/bin/bash -e

declare -a databases=("buh" "ut" "zup")

for dbname in "${databases[@]}"
do
FILENAME=/backups-postgre/backup-$dbname-$(date +"%Y-%m-%dT%H-%m-%S")".dump.gz"

if sudo -u postgres pg_dump $dbname | gzip > $FILENAME ; then
echo $FILENAME "OK"
else
echo $FILENAME "ERROR"
fi

done

find /backups-postgre -type f -ctime +20 -delete

exit 0

Этот файл при запуске будет перебирать массив баз данных PostgreSQL и делать по ним выборочный бэкап и отправлять каждую БД в отдельный gz файл. Файл будет иметь имя включающее признак backup, название БД и дату/время. Таким образом, каждый бэкап будет уникальным и весь вопрос будет только в том чтобы следить за свободным пространством. Важно, чтобы бэкап выполнялся от имени postgres, для этого в скрипте используется модификатор sudo. Запись find будет искать бэкапы старше 20 дней и удалять их. Это сделано чтобы не загромождать диск.

Файл будет запускаться из Cron. Для этого нужно настроить Cron.

sudo crontab -e

Чтобы бэкап запускался каждый день в 7 утра, в файл внести запись:

0 7 * * * /etc/snake-backup-script

Теперь хороший вопрос, как восстановить:

Распаковываем нужную резервную копию:

gunzip /backups-postgre/mybackupfile.dump.gz

su postgres

Проверить наверняка базы данных:

psql -l

Удалить базу, в которую восстанавливать:

psql -c "DROP DATABASE mydatabase;"

Создать заново базу данных:

psql -c "CREATE DATABASE mydatabase;"

Восстановить базу данных:

psql -d mydatabase < /backups-postgre/mybackupfile.dump