104 lines
3.1 KiB
Markdown
104 lines
3.1 KiB
Markdown
# 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
|
||
``` |