Назад | Перейти на главную страницу

Ежедневное резервное копирование Postgresql

Есть ли простой способ ежедневного резервного копирования всех ваших локальных баз данных (тот же сервер postgresql)? Я нашел несколько сценариев bash, которые могу использовать, но они кажутся очень сложными для такой работы.

Есть какие-нибудь простые предложения?

Поскольку мои базы данных довольно малы, я "обманываю" и использую logrotate для создания резервных копий postgresql. Примерно так в /etc/logrotate.d/postgresql-backup:

/var/backups/postgresql-dump.sql {
        daily
        nomissingok
        rotate 30
        compress
        delaycompress
        ifempty
        create 640 root adm
        dateext
        postrotate
                /usr/bin/sudo -u postgres /usr/bin/pg_dumpall --clean > /var/backups/postgresql-dump.sql
        endscript
}

Это дает мне удобный доступный полный дамп, не старше одного дня, и автоматически сжимает и вращает предыдущие дампы.

Очевидно, это не будет масштабироваться с большими базами данных, но для моей цели это почти идеально. (Я также использую BackupPC для обработки удаленных резервных копий, которые включают локальные резервные копии postgresql)

Если у вас есть /etc/cron.daily, поместите туда однострочник, который вызывает pg_dumpall.

Примечание: это самый простой способ, но он создает несжатый сценарий SQL, который будет выполняться из psql.

Для сжатия используйте gzip (быстрее), bzip2 или lzma (медленнее, меньший размер)

В простых случаях может быть достаточно хранить разные копии на каждый рабочий день. Хранение еженедельных, ежемесячных или инкрементных резервных копий зависит от вас.

Я полагаю, что сложные сценарии, которые вы видели, создают резервные копии баз данных в двоичном формате с использованием pg_dump / pg_restore, что является более гибким.

Я настроил ежедневное резервное копирование следующим образом:

mkdir /home/dbdump

vim /etc/cron.daily/dbdump

#!/bin/sh
pg_dumpall --globals-only --username=postgres > /home/dbdump/globals.dump
pg_dump --format=custom --username=postgres > /home/dbdump/postgres.dump

chmod 700 /etc/cron.daily/dbdump

Затем я использую rsnapshot с другого сайта, чтобы сохранить копии этих дампов.

Причина, по которой я решил не использовать pg_dumpall, заключается в том, что pg_dump имеет более гибкие варианты. Вам нужно будет использовать несколько pg_dump команды, если у вас несколько баз данных

я использую autopgsqlbackup (PostgreSQL порт automysqlbackup), также можно установить как Пакет Debian.