Блог компании 3v-Hosting

Как настроить простое резервное копирование PostgreSQL

Администрирование

6 мин.


PostgreSQL - это самая надежная и устойчивая система реляционных баз данных с открытым исходным кодом, которая используется сегодня в средах разработки и производства по всему миру. Управление базами данных для веб-приложений, внутренних инструментов или инфраструктурных сервисов требует создания эффективной и последовательной стратегии резервного копирования. Хорошо спланированное резервное копирование необходимо для предотвращения потери данных и обеспечения непрерывности работы в случае сбоя, случайного удаления или повреждения системы.

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

 

 

 

 

Подходы к резервному копированию PostgreSQL

 

PostgreSQL предоставляет как логические, так и физические варианты резервного копирования, подходящие для разных целей:

    - Логическое резервное копирование с помощью pg_dump
    - Физическое резервное копирование с помощью pg_basebackup
    - Точечное восстановление с использованием архивации WAL

 

Для простой настройки часто бывает достаточно pg_dump и pg_basebackup. Эти инструменты доступны по умолчанию в большинстве инсталляций PostgreSQL и могут использоваться с минимальными настройками.

 

 

 

 

Логическое резервное копирование с помощью pg_dump

 

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

Пример команды:

    pg_dump -U postgres -d your_database -F c -f /backups/your_database.backup

Пояснение:

    -U postgres: пользователь базы данных
    -d your_database: имя базы данных для резервного копирования
    -F c: пользовательский формат (рекомендуется для гибкости и сжатия)
    -f: путь к выходному файлу

 

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

 

 

 

 

Физическое резервное копирование с помощью pg_basebackup

 

pg_basebackup создает двухуровневую копию всего каталога данных PostgreSQL, сохраняя все конфигурации, индексы и журналы WAL, необходимые для полного восстановления.

Пример команды:

    pg_basebackup -U replication_user -D /var/lib/postgresql/backup/ -Ft -z -P


Чтобы использовать этот метод, включите доступ к репликации, обновив файл pg_hba.conf:

    host replication replication_user 127.0.0.1/32 md5


И настройте postgresql.conf:

    wal_level = replica
    max_wal_senders = 3

 

Перезапустите PostgreSQL после применения этих настроек.

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

 

 

 

 

Автоматизация резервного копирования PostgreSQL

 

Резервное копирование вручную может быть сопряжено с ошибками и легко забывается. Простой сценарий оболочки в сочетании с cron поможет эффективно автоматизировать ежедневное резервное копирование.

Пример сценария (pg_backup.sh):

    #!/bin/bash
    DATE=$(date+%F)
    BACKUP_DIR="/var/backups/postgresql»
    DB_NAME="your_database»
    PG_USER="postgres»

    mkdir -p «$BACKUP_DIR»
    pg_dump -U «$PG_USER» -F c «$DB_NAME» > «$BACKUP_DIR/${DB_NAME}_$DATE.backup»
    find «$BACKUP_DIR» -type f -name «*.backup» -mtime +7 -exec rm -f {} \;


Сделайте скрипт исполняемым:

    chmod +x /usr/local/bin/pg_backup.sh


Запланируйте его через кронтаб:

    0 2 * * * /usr/local/bin/pg_backup.sh

Этот пример создает новую резервную копию ежедневно в 2:00 AM и удаляет все резервные копии старше 7 дней.

 


 

Другие полезные статьи в нашем Блоге:


    - Подробное руководство: как найти и оптимизировать медленные запросы в MySQL

    - Создание нового пользователя и управление привилегиями в MySQL

    - Добавление нового пользователя в PostgreSQL

    - Как выбрать правильную конфигурацию сервера для ваших нужд

 


 

 

Передача резервных копий с помощью rsync

 

Чтобы обеспечить избыточность и доступность данных, резервные копии следует копировать на другую физическую или виртуальную машину. Одним из самых простых и надежных инструментов для этого является rsync.

Пример команды rsync:

    rsync -avz /var/backups/postgresql/ user@192.168.1.100:/mnt/backup-node/postgresql/


Эта команда синхронизирует каталог резервных копий с удаленным хостом по SSH. Флаг -z сжимает данные при передаче, а -a сохраняет атрибуты файлов. Вы также можете интегрировать rsync в сценарий резервного копирования:

    rsync -az «$BACKUP_DIR/» user@backupserver:/remote/backup/postgresql/

 

Чтобы сделать эту процедуру более безопасной и автоматизированной, настройте аутентификацию между серверами на основе ключей SSH.

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

 

 

 

 

Проверка и восстановление резервных копий

 

Стратегия резервного копирования надежна только в том случае, если ее можно проверить и успешно восстановить.

Команда тестового восстановления:

    createdb test_restore
    pg_restore -U postgres -d test_restore /var/backups/postgresql/your_database_2025-05-11.backup

 

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

 

 

 

 

Расширенный вариант: Восстановление по точке во времени (PITR)

 

Для сценариев, в которых требуется восстановить данные до определенного момента (например, непосредственно перед случайным удалением), включите архивирование WAL:

В postgresql.conf:

    archive_mode = on
    archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'

 

Затем периодически делайте резервные копии базы с помощью pg_basebackup и сохраняйте соответствующие WAL-файлы.

Восстановление выполняется путем восстановления базовой резервной копии и воспроизведения журналов WAL до нужного момента. Хотя этот метод более сложен, он предоставляет широкие возможности для восстановления.

 

 

 

 

Лучшие практики резервного копирования

 

    Автоматизируйте ВСЁ: используйте cron для резервного копирования и rsync для удаленных копий.
    Регулярно проверяйте: Ежемесячно тестируйте процедуры восстановления.
    Ограничьте срок хранения: Храните резервные копии только до тех пор, пока это необходимо для экономии дискового пространства.
    Разделяйте хранилища: Используйте другой сервер, внешний диск или подключенное сетевое хранилище для резервирования.
    Документируйте шаги по восстановлению: Убедитесь, что процесс восстановления прописан и известен вашей команде.

 

 

 


Заключение

Настройка простого решения для резервного копирования PostgreSQL не требует сложной инфраструктуры или внешних сервисов. Встроенные инструменты, такие как pg_dump, pg_basebackup и rsync, обеспечивают надежный и эффективный рабочий процесс резервного копирования. Чтобы обеспечить ежедневную защиту данных, долгосрочное архивирование или аварийное восстановление, необходимо начать с простого автоматического резервного копирования.

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