Skip to content

About

Автоматический бэкап базы данных PostgreSQLS на S3 хранилище в России (ФЗ-152)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

PostgreSQL Backup → Beget S3 (Multi-DB)

Ежедневный backup баз данных PostgreSQL с автоматической отправкой в Beget S3 (bucket your name, папка backup-db/). Поддерживает несколько баз данных, ротация 60 копий на каждую БД отдельно. Можете переписать на любое другое S3 хранилище, Beget я использую не потому что он лучший (вообще не так), а потому что мне удобно.

Базы данных

  • db1
  • db2
  • db3

Возможности

  • pg_dump → zip -P (сжатие с паролем) → загрузка в Beget S3
  • Multi-DB: все базы бэкапятся за один запуск
  • Ротация: максимум 60 копий на каждую БД, удаление старейших
  • Структура: backup-db/<dbname>/<dbname>_<timestamp>.zip
  • CLI для управления backup'ами

Установка

Зависимости: python3, minio, pg_dump, zip/unzip.

python3 -m venv venv
./venv/bin/pip install minio

Использование

cd /home/yourname/pg-backup

# Создать backup всех БД прямо сейчас
./venv/bin/python3 backup.py backup

# Список всех backup'ов (все БД)
./venv/bin/python3 backup.py list

# Список backup'ов для конкретной БД
./venv/bin/python3 backup.py list --db1

# Статус: кол-во копий, старейшая, новейшая (все БД)
./venv/bin/python3 backup.py status

# Статус для конкретной БД
./venv/bin/python3 backup.py status --db starwithme

# Скачать backup локально
./venv/bin/python3 backup.py download db1-07-27_030000.zip --db blissmeflash -o /tmp

# Восстановить БД из backup'а
./venv/bin/python3 backup.py restore db1-07-27_030000.zip --db blissmeflash

# Удалить старые копии (если > 60) для всех БД
./venv/bin/python3 backup.py cleanup

# Удалить старые копии для конкретной БД
./venv/bin/python3 backup.py cleanup --db peaceandlove

# Установить cron (ежедневно в 03:00)
./venv/bin/python3 backup.py install-cron

# Установить cron на другое время (05:30)
./venv/bin/python3 backup.py install-cron --hour 5 --minute 30

Конфигурация

Все настройки в .env:

DATABASE_URL_1=postgresql://user:pass@host:port/dbname1
DATABASE_URL_2=postgresql://user:pass@host:port/dbname2
DATABASE_URL_3=postgresql://user:pass@host:port/dbname3

BEGET_S3_ACCESS_KEY_ID=...
BEGET_S3_SECRET_ACCESS_KEY=...
BEGET_S3_BUCKET_NAME=...
BEGET_S3_REGION=ru-1
BEGET_S3_ENDPOINT=https://s3.ru1.storage.beget.cloud

BACKUP_PASSWORD=....
MAX_BACKUPS=60
S3_BACKUP_PREFIX=backup-db/

Cron

Cron задача запускается каждый день в 03:00:

0 3 * * * /home/yourname/pg-backup/venv/bin/python3 /home/yourname/pg-backup/backup.py backup >> /home/yourname/pg-backup/backup.log 2>&1

Логи: /home/yourname/pg-backup/backup.log

Структура в Beget S3

3a82fdd31df5-vega-s3/
└── backup-db/
    ├── blissmeflash/
    │   ├── db1-07-27_030000.zip
    │   ├── db1-07-28_030000.zip
    │   └── ...  (макс. 60 файлов)
    ├── starwithme/
    │   ├── starwithme_2025-07-27_030000.zip
    │   └── ...  (макс. 60 файлов)
    └── peaceandlove/
        ├── peaceandlove_2025-07-27_030000.zip
        └── ...  (макс. 60 файлов)

Восстановление

# Скачать и восстановить
./venv/bin/python3 backup.py restore db1-07-27_030000.zip --db blissmeflash

# Или вручную: скачать, разархивировать, загрузить
./venv/bin/python3 backup.py download db1-07-27_030000.zip --db blissmeflash -o /tmp
unzip -P renovatio /tmp/db1-07-27_030000.zip -d /tmp
psql -h localhost -U yourname -d blissmeflash -f /tmp/db1-07-27_030000.sql

About

Автоматический бэкап базы данных PostgreSQLS на S3 хранилище в России (ФЗ-152)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages