|
build (backupdb) TeamCity build finished
Details
|
||
|---|---|---|
| configs | ||
| scripts | ||
| .env.example | ||
| Dockerfile | ||
| README.md | ||
README.md
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
Установка и запуск
- Скопируйте
.env.exampleв.envи укажите пароли MySQL для каждого окружения:
cp .env.example .env
# Отредактируйте .env и укажите реальные пароли
- Убедитесь, что сети Docker существуют:
docker network ls | grep -E "prod_dd|tqo_dd|eks_dd"
- Соберите Docker образ:
docker-compose build
- Запустите нужные сервисы:
# Запуск всех бэкапов
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.gzmydatabase.Tue.sql.gz
Ручной запуск бэкапа
Для немедленного создания бэкапа:
docker-compose exec backup-prod sh -c "kill 1"
# Контейнер перезапустится и сразу начнет бэкап
Восстановление из бэкапа
- Скачайте бэкап из S3 или найдите в локальном volume
- Распакуйте:
gunzip database.Mon.sql.gz
- Восстановите:
mysql -h hostname -u root -p database_name < database.Mon.sql