Блог компанії 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 з розумом. Від цього залежать ваші дані.