config_eks/BACKUP.md

4.6 KiB
Raw Permalink Blame History

Резервное копирование БД - EKS

Описание

В этой конфигурации настроено автоматическое резервное копирование всех баз данных MariaDB каждые 12 часов с загрузкой в S3 хранилище Selectel.

Как это работает

Сервис backupdb

В docker-compose.yml добавлен сервис backupdb, который:

  1. Запускается автоматически вместе с остальными сервисами
  2. Подключается к БД через контейнер db в той же Docker сети
  3. Создает бэкапы каждые 12 часов для всех баз (кроме системных)
  4. Сжимает данные через gzip для экономии места
  5. Загружает в S3 по пути selectel:backup_db/spottorg/eks/
  6. Ротирует бэкапы - хранит 7 последних копий локально

Процесс создания бэкапа

1. Получение списка БД → 2. Создание дампа → 3. Сжатие → 4. Загрузка в S3 → 5. Очистка старых

Для каждой базы данных:

  • Создается файл: {database}.{День}.sql.gz (например: eks_db.Mon.sql.gz)
  • Используется mysqldump с параметрами для консистентности без блокировок
  • Загружается в S3 с помощью rclone

Конфигурация

Переменные окружения

MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}  # из .env файла
DB_HOST: db                                   # контейнер с БД
S3_PATH: spottorg                             # путь в S3
ENVIRONMENT: eks                              # окружение

Volumes

  • mysql_backup_volume:/backups - локальное хранение бэкапов
  • /home/ddadmin/.config/rclone/rclone.conf - конфиг для S3

Мониторинг

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

docker-compose logs -f backupdb

Проверка статуса

docker-compose ps backupdb

Просмотр бэкапов в S3

rclone ls selectel:backup_db/spottorg/eks/

Восстановление

Из S3

# 1. Скачать бэкап
rclone copy selectel:backup_db/spottorg/eks/eks_db.Mon.sql.gz ./

# 2. Распаковать
gunzip eks_db.Mon.sql.gz

# 3. Восстановить в БД
docker-compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD} eks_db < eks_db.Mon.sql

Из локального volume

# 1. Копировать из volume
docker run --rm -v eks_mysql_backup_volume:/backup -v $(pwd):/out alpine \
  cp /backup/eks_db.Mon.sql.gz /out/

# 2. Распаковать и восстановить
gunzip eks_db.Mon.sql.gz
docker-compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD} eks_db < eks_db.Mon.sql

Ручное управление

Немедленный запуск бэкапа

docker-compose restart backupdb

Остановка бэкапов

docker-compose stop backupdb

Запуск бэкапов

docker-compose start backupdb

Расписание и ротация

  • Частота: каждые 12 часов
  • Локальное хранение: 7 последних копий
  • S3 хранение: по дням недели (Mon-Sun), перезаписываются еженедельно
  • Максимальная история: 7 дней для каждой БД

Особенности EKS

  • S3 путь: spottorg/eks/ (отличается от production)
  • Окружение: EKS (Elastic Kubernetes Service - тестовое окружение)
  • Сеть Docker: eks_dd

Troubleshooting

Бэкап не создается

  1. Проверьте логи: docker-compose logs backupdb
  2. Проверьте пароль MySQL в .env
  3. Проверьте доступность БД: docker-compose exec backupdb mysql -h db -uroot -p

Не загружается в S3

  1. Проверьте конфиг rclone: ls -la /home/ddadmin/.config/rclone/rclone.conf
  2. Тестируйте подключение: docker-compose exec backupdb rclone ls selectel:backup_db/

Нет места на диске

  1. Проверьте volume: docker volume ls | grep backup
  2. Очистите старые бэкапы: docker-compose exec backupdb rm /backups/*.sql.gz