backupdb/README.md

3.1 KiB
Raw Blame History

Backup Service

Централизованный сервис для резервного копирования баз данных всех окружений (prod, tqo, eks).

Возможности

  • Автоматическое резервное копирование каждые 12 часов
  • Сжатие бэкапов с помощью gzip
  • Загрузка в S3 (Selectel) через rclone
  • Раздельное хранение бэкапов по окружениям
  • Автоматическая ротация (хранение последних 7 бэкапов)

Структура каталогов

backup_service/
├── docker-compose.yml      # Конфигурация Docker Compose
├── Dockerfile.backup        # Docker образ с rclone
├── .env                    # Переменные окружения (создать из .env.example)
├── scripts/
│   └── backup-db.sh        # Скрипт резервного копирования
└── configs/
    └── rclone.conf         # Конфигурация rclone для S3

Установка и запуск

  1. Скопируйте .env.example в .env и укажите пароли MySQL для каждого окружения:
cp .env.example .env
# Отредактируйте .env и укажите реальные пароли
  1. Убедитесь, что сети Docker существуют:
docker network ls | grep -E "prod_dd|tqo_dd|eks_dd"
  1. Соберите Docker образ:
docker-compose build
  1. Запустите нужные сервисы:
# Запуск всех бэкапов
docker-compose up -d

# Или запуск только для конкретного окружения
docker-compose up -d backup-prod
docker-compose up -d backup-tqo
docker-compose up -d backup-eks

Мониторинг

Просмотр логов:

# Все сервисы
docker-compose logs -f

# Конкретное окружение
docker-compose logs -f backup-prod

Расположение бэкапов

Локальные бэкапы

  • Prod: mysql_backup_volume_prod
  • TQO: mysql_backup_volume_tqo
  • EKS: mysql_backup_volume_eks

S3 (Selectel)

  • Prod: selectel:backup_db/dot/prod/
  • TQO: selectel:backup_db/dot/tqo/
  • EKS: selectel:backup_db/dot/eks/

Формат имен файлов

Бэкапы сохраняются в формате: {database_name}.{day_of_week}.sql.gz

Например:

  • mydatabase.Mon.sql.gz
  • mydatabase.Tue.sql.gz

Ручной запуск бэкапа

Для немедленного создания бэкапа:

docker-compose exec backup-prod sh -c "kill 1"
# Контейнер перезапустится и сразу начнет бэкап

Восстановление из бэкапа

  1. Скачайте бэкап из S3 или найдите в локальном volume
  2. Распакуйте:
gunzip database.Mon.sql.gz
  1. Восстановите:
mysql -h hostname -u root -p database_name < database.Mon.sql