backupdb/README.md

104 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```