· postgresql, backup

Резервные копии PostgreSQL по расписанию и проверка восстановления

Бэкап, из которого ни разу не пробовали восстановиться, — это скорее надежда, чем бэкап. Ниже минимальная схема для небольшой базы: ежедневная копия, хранение за две недели и регулярная проверка.

Скрипт копирования

#!/bin/sh
set -e
DIR=/var/backups/postgres
mkdir -p "$DIR"
pg_dump -U postgres -Fc mydb > "$DIR/mydb-$(date +%F).dump"
find "$DIR" -name 'mydb-*.dump' -mtime +14 -delete

Формат -Fc сжатый и позволяет потом восстанавливать отдельные таблицы через pg_restore.

Расписание

Самый простой вариант — cron от пользователя postgres:

30 3 * * * /usr/local/bin/pg-backup.sh

Проверка восстановления

Раз в неделю поднимаю последнюю копию во временную базу и проверяю, что данные на месте:

createdb -U postgres restore_test
pg_restore -U postgres -d restore_test "$(ls -t /var/backups/postgres/*.dump | head -1)"
psql -U postgres -d restore_test -c "select count(*) from users;"
dropdb -U postgres restore_test

Копии не должны жить на том же сервере

Если сервер выйдет из строя целиком, локальные копии пропадут вместе с ним. Минимум — раз в сутки отправлять последний файл на другой хост или в объектное хранилище.

← Ко всем заметкам