Как настроить автоматическое резервное копирование базы данных PostgreSQL через pg_dump с загрузкой в облако Google Drive?
Автоматическое резервное копирование базы данных PostgreSQL с загрузкой в Google Drive — надёжный способ защиты данных. Ниже представлена пошаговая инструкция.
## 1. Установка необходимых инструментов
Убедитесь, что на сервере установлены:
— `postgresql-client` (содержит `pg_dump`)
— Python 3 и pip
— `rclone` или `gdrive` для работы с Google Drive
Рекомендуется использовать **rclone** — универсальный инструмент для работы с облачными хранилищами.
bash
sudo apt update && sudo apt install postgresql-client rclone -y
## 2. Настройка rclone для Google Drive
Запустите интерактивную настройку:
bash
rclone config
Выберите `n` (новый remote), укажите имя (например, `gdrive`), выберите тип `drive` (Google Drive). Следуйте инструкциям для авторизации через браузер. После завершения у вас будет настроенный remote `gdrive:`.
## 3. Создание скрипта резервного копирования
Создайте файл `/usr/local/bin/pg_backup.sh`:
bash
#!/bin/bash
DB_NAME=»your_database»
DB_USER=»postgres»
BACKUP_DIR=»/tmp/pg_backups»
REMOTE_DIR=»gdrive:PostgreSQL_Backups»
DATE=$(date +%Y-%m-%d_%H-%M-%S)
FILE=»$BACKUP_DIR/${DB_NAME}_$DATE.sql.gz»
mkdir -p $BACKUP_DIR
# Создание дампа с компрессией
PGPASSWORD=»your_password» pg_dump -U $DB_USER -h localhost $DB_NAME | gzip > $FILE
# Загрузка в Google Drive
rclone copy $FILE $REMOTE_DIR —log-file=/var/log/pg_backup.log
# Удаление локального файла
rm -f $FILE
# Удаление старых бэкапов в облаке (старше 30 дней)
rclone delete $REMOTE_DIR —min-age 30d
echo «Backup $FILE completed and uploaded to Google Drive.»
Сделайте скрипт исполняемым:
bash
chmod +x /usr/local/bin/pg_backup.sh
## 4. Безопасное хранение пароля
Вместо хранения пароля в скрипте используйте файл `.pgpass`:
bash
echo «localhost:5432:your_database:postgres:your_password» >> ~/.pgpass
chmod 600 ~/.pgpass
После этого уберите `PGPASSWORD=…` из скрипта.
## 5. Настройка автозапуска через cron
Откройте crontab:
bash
crontab -e
Добавьте строку для ежедневного запуска в 2:00 ночи:
0 2 * * * /usr/local/bin/pg_backup.sh >> /var/log/pg_backup_cron.log 2>&1
## 6. Проверка работоспособности
Запустите скрипт вручную и убедитесь, что файл появился в Google Drive:
bash
/usr/local/bin/pg_backup.sh
rclone ls gdrive:PostgreSQL_Backups
## Советы по безопасности
— Шифруйте бэкапы перед загрузкой с помощью `gpg`
— Настройте уведомления об ошибках на email через `mail` или Telegram-бота
— Периодически проверяйте восстановление из бэкапа командой `pg_restore`
Такой подход обеспечивает надёжное автоматическое резервное копирование с минимальными затратами ресурсов.
