Compare commits

..

3 Commits

Author SHA1 Message Date
ddadmin 36c566d8dd update 2025-09-26 21:36:27 +03:00
ddadmin f3db5d8786 update 2025-09-26 21:36:13 +03:00
ddadmin 035c58c0b8 update 2025-09-26 21:36:01 +03:00
5 changed files with 6 additions and 136 deletions

2
.env
View File

@ -1,4 +1,4 @@
1COMPOSE_PROJECT_NAME=tqo
COMPOSE_PROJECT_NAME=tqo
NETWORK=tqo
FRONT_TAG=139.2

BIN
.env.swp Normal file

Binary file not shown.

130
BACKUP.md
View File

@ -1,130 +0,0 @@
# Резервное копирование БД - TQO
## Описание
В этой конфигурации настроено автоматическое резервное копирование всех баз данных MariaDB каждые 12 часов с загрузкой в S3 хранилище Selectel.
## Как это работает
### Сервис backupdb
В `docker-compose.yml` добавлен сервис `backupdb`, который:
1. **Запускается автоматически** вместе с остальными сервисами
2. **Подключается к БД** через контейнер `db` в той же Docker сети
3. **Создает бэкапы** каждые 12 часов для всех баз (кроме системных)
4. **Сжимает данные** через gzip для экономии места
5. **Загружает в S3** по пути `selectel:backup_db/spottorg/tqo/`
6. **Ротирует бэкапы** - хранит 7 последних копий локально
### Процесс создания бэкапа
```
1. Получение списка БД → 2. Создание дампа → 3. Сжатие → 4. Загрузка в S3 → 5. Очистка старых
```
Для каждой базы данных:
- Создается файл: `{database}.{День}.sql.gz` (например: `tqo_db.Mon.sql.gz`)
- Используется `mysqldump` с параметрами для консистентности без блокировок
- Загружается в S3 с помощью rclone
## Конфигурация
### Переменные окружения
```yaml
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} # из .env файла
DB_HOST: db # контейнер с БД
S3_PATH: spottorg # путь в S3
ENVIRONMENT: tqo # окружение
```
### Volumes
- `mysql_backup_volume:/backups` - локальное хранение бэкапов
- `/home/ddadmin/.config/rclone/rclone.conf` - конфиг для S3
## Мониторинг
### Просмотр логов
```bash
docker-compose logs -f backupdb
```
### Проверка статуса
```bash
docker-compose ps backupdb
```
### Просмотр бэкапов в S3
```bash
rclone ls selectel:backup_db/spottorg/tqo/
```
## Восстановление
### Из S3
```bash
# 1. Скачать бэкап
rclone copy selectel:backup_db/spottorg/tqo/tqo_db.Mon.sql.gz ./
# 2. Распаковать
gunzip tqo_db.Mon.sql.gz
# 3. Восстановить в БД
docker-compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD} tqo_db < tqo_db.Mon.sql
```
### Из локального volume
```bash
# 1. Копировать из volume
docker run --rm -v tqo_mysql_backup_volume:/backup -v $(pwd):/out alpine \
cp /backup/tqo_db.Mon.sql.gz /out/
# 2. Распаковать и восстановить
gunzip tqo_db.Mon.sql.gz
docker-compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD} tqo_db < tqo_db.Mon.sql
```
## Ручное управление
### Немедленный запуск бэкапа
```bash
docker-compose restart backupdb
```
### Остановка бэкапов
```bash
docker-compose stop backupdb
```
### Запуск бэкапов
```bash
docker-compose start backupdb
```
## Расписание и ротация
- **Частота**: каждые 12 часов
- **Локальное хранение**: 7 последних копий
- **S3 хранение**: по дням недели (Mon-Sun), перезаписываются еженедельно
- **Максимальная история**: 7 дней для каждой БД
## Особенности TQO
- **S3 путь**: `spottorg/tqo/` (отличается от production)
- **Окружение**: TQO (Test Quality Optimization)
- **Сеть Docker**: `tqo_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`

8
app.sh
View File

@ -1,8 +1,8 @@
DIRECTORY=`dirname $0`
MYSQL_ROOT_PASSWORD=$(grep MYSQL_ROOT_PASSWORD $DIRECTORY"/.env" | xargs)
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD#*=}
#MYSQL_ROOT_PASSWORD=$(grep MYSQL_ROOT_PASSWORD $DIRECTORY"/.env" | xargs)
#MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD#*=}
source $DIRECTORY"/.env"
help() {
echo "run $0 [COMMAND] "
echo '
@ -48,7 +48,7 @@ log() {
## restore last backup from s3 storage
restoredb() {
log "run restore database"
sudo rclone copy --verbose selectel:backup_db/dot/dot.$(date +%a).sql.gz backups/
sudo rclone copy --verbose selectel:backup_db/dot/spottorg/tqo/dot.$(date +%a).sql.gz backups/
zcat backups/dot.$(date +%a).sql.gz | docker compose exec -T db mysql -uroot -p${MYSQL_ROOT_PASSWORD} dot
}

View File

@ -232,7 +232,7 @@ services:
- dd
backupdb:
image: registry.dot-dot.ru/backupdb:master
image: registry.dot-dot.ru/backupdb:v0.0.2
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}