4.6 KiB
4.6 KiB
Резервное копирование БД - EKS
Описание
В этой конфигурации настроено автоматическое резервное копирование всех баз данных MariaDB каждые 12 часов с загрузкой в S3 хранилище Selectel.
Как это работает
Сервис backupdb
В docker-compose.yml добавлен сервис backupdb, который:
- Запускается автоматически вместе с остальными сервисами
- Подключается к БД через контейнер
dbв той же Docker сети - Создает бэкапы каждые 12 часов для всех баз (кроме системных)
- Сжимает данные через gzip для экономии места
- Загружает в S3 по пути
selectel:backup_db/spottorg/eks/ - Ротирует бэкапы - хранит 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
Бэкап не создается
- Проверьте логи:
docker-compose logs backupdb - Проверьте пароль MySQL в .env
- Проверьте доступность БД:
docker-compose exec backupdb mysql -h db -uroot -p
Не загружается в S3
- Проверьте конфиг rclone:
ls -la /home/ddadmin/.config/rclone/rclone.conf - Тестируйте подключение:
docker-compose exec backupdb rclone ls selectel:backup_db/
Нет места на диске
- Проверьте volume:
docker volume ls | grep backup - Очистите старые бэкапы:
docker-compose exec backupdb rm /backups/*.sql.gz