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

3v-Hosting Team

Автор

3v-Hosting Team

Команда 3v-Hosting складається з групи відданих своїй справі інженерів та операторів, які повністю присвятили себе створенню та підтримці основи наших сервісів. Щодня ми занурюємося у світ віртуальних та виділених серверів, займаючись усім, від розгортання та моніторингу до усунення реальних проблем, що виникають у виробничих середовищах. Більшість наших статей ґрунтуються на практичному досвіді, а не лише на теорії. Ми ділимося своїми думками щодо викликів, з якими стикаємося: перебоїв у роботі, помилок у налаштуваннях, складнощів мережевої взаємодії та архітектурних рішень, що впливають на стабільність і надійність. Наша місія проста - ми хочемо ділитися знаннями, які допоможуть вам керувати своїми проектами з меншою кількістю несподіванок та набагато більшою передбачуваністю.

Як виправити помилку HTTP 504 (Gateway Timeout)
Як виправити помилку HTTP 504 (Gateway Timeout)

Дізнайтеся, що означає помилка HTTP 504 Gateway Timeout, чому вона виникає в Nginx, Cloudflare, Docker та Kubernetes, а також як правильно діагностувати та усун...

16 хв
Як правильно вибрати VPS для веб-трейдингу
Як правильно вибрати VPS для веб-трейдингу

Як вибрати VPS для трейдингу. Що важливіше - мережа, стабільність чи технічні характеристики. Розбираємося, що таке затримка, обговорюємо ресурси сервера та під...

11 хв