# 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 для каждого окружения: ```bash cp .env.example .env # Отредактируйте .env и укажите реальные пароли ``` 2. Убедитесь, что сети Docker существуют: ```bash docker network ls | grep -E "prod_dd|tqo_dd|eks_dd" ``` 3. Соберите Docker образ: ```bash docker-compose build ``` 4. Запустите нужные сервисы: ```bash # Запуск всех бэкапов docker-compose up -d # Или запуск только для конкретного окружения docker-compose up -d backup-prod docker-compose up -d backup-tqo docker-compose up -d backup-eks ``` ## Мониторинг Просмотр логов: ```bash # Все сервисы 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` ## Ручной запуск бэкапа Для немедленного создания бэкапа: ```bash docker-compose exec backup-prod sh -c "kill 1" # Контейнер перезапустится и сразу начнет бэкап ``` ## Восстановление из бэкапа 1. Скачайте бэкап из S3 или найдите в локальном volume 2. Распакуйте: ```bash gunzip database.Mon.sql.gz ``` 3. Восстановите: ```bash mysql -h hostname -u root -p database_name < database.Mon.sql ```