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