Для 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