0c7847abba
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
7.0 KiB
7.0 KiB
Backup и Възстановяване
BaraDB предоставя няколко стратегии за backup — от пълни snapshot-ове до инкрементални, online consistent backups и multi-database архивиране.
Архитектура
┌─────────────────────────────────────────┐
│ Data Root │
│ └── databases/ │
│ ├── default/ │
│ │ ├── MANIFEST │
│ │ ├── sstables/ │
│ │ └── wal/ │
│ ├── mydb/ │
│ │ ├── MANIFEST │
│ │ ├── sstables/ │
│ │ └── wal/ │
│ └── ... │
└─────────────────────────────────────────┘
Backup Инструмент
nim c -o:build/backup src/barabadb/core/backup.nim
Multi-Database Backup (Препоръчително)
Архивиране на всички бази
./build/backup backup --all-databases --data-root=./data/databases --output=all_$(date +%s).tar.gz
Архивът съдържа:
backup.json— метаданни (версия, timestamp, списък бази)databases/<име>/— всяка база със своя MANIFEST, SSTables и WAL
Backup на единична база
./build/backup backup --database=default --data-root=./data/databases --output=default_$(date +%s).tar.gz
Възстановяване на всички бази
./build/backup restore --input=all_1234567890.tar.gz --all-databases --data-root=./data/databases
Възстановяване на единична база
./build/backup restore --input=default_1234567890.tar.gz --database=default --data-root=./data/databases
Legacy Single-Directory Backup
За обратна съвместимост със стари инсталации (една база в data/server):
./build/backup backup --data-dir=./data/server --output=legacy_$(date +%s).tar.gz
./build/backup restore --input=legacy_1234567890.tar.gz --data-dir=./data/server
Инкрементален Backup
./build/backup incremental --database=default --data-root=./data/databases --output=inc_$(date +%s).tar.gz
Включва само:
MANIFEST- Активни SSTables (от MANIFEST)
- Текущ WAL (
wal/wal.log) - WAL архив (
wal/wal_archive/*.log)
Всички SSTables се проверяват с CRC преди архивиране.
Online Consistent Backup
./build/backup backup --online --database=default --data-root=./data/databases --output=online_$(date +%s).tar.gz
Еквивалентно на:
checkpoint(freeze memtable, flush, rotate WAL)incremental backup
Безопасно за пускане докато сървърът работи.
HTTP API Backup
Backup/restore е достъпен и през REST API (изисква admin JWT токен):
# Backup на всички бази
curl -X POST http://localhost:9912/backup \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"all": true}'
# Backup на единична база
curl -X POST http://localhost:9912/backup \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"database": "default"}'
# Списък с архиви
curl http://localhost:9912/backups \
-H "Authorization: Bearer <token>"
# Restore
curl -X POST http://localhost:9912/restore \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"input": "backup_1234567890.tar.gz", "all": true}'
SSTable Integrity (v3 CRC Footer)
[Header] 36 байта
magic, version(3), entryCount, level,
indexOffset, bloomOffset, footerOffset
[Data Block]
[Index Block]
[Bloom Block]
[Footer] 16 байта
dataCrc32, indexCrc32, bloomCrc32, reserved
Storage Repair (baradadb repair)
# Dry run — само преглед
./build/baradadb repair --data-dir=./data/databases/default --dry-run
# Пълен ремонт
./build/baradadb repair --data-dir=./data/databases/default
MANIFEST Каталог
{
"version": 1,
"sequence": 42,
"createdAt": 1779103266,
"sstables": [
{"id": 1, "path": "sstables/1.sst", "level": 0, "minKey": "a", "maxKey": "z", "entryCount": 100}
]
}
Checkpoint
./build/baradadb checkpoint --data-dir=./data/databases/default
Как работи:
- Freeze на memtable (< 1ms)
- Flush към SSTable
- Ротация на WAL
- Запис на MANIFEST
Миграция на SSTable Версии
./build/baradadb migrate --data-dir=./data/databases/default --dry-run
./build/baradadb migrate --data-dir=./data/databases/default
Процедури за Възстановяване
Сценарий 1: Корумпиран SSTable
./build/baradadb repair --data-dir=./data/databases/default
Сценарий 2: Възстановяване от Multi-Database Backup
# 1. Разархивиране
./build/backup restore --input=backup_latest.tar.gz --all-databases --data-root=./data/databases
# 2. Repair за всяка база
for db in ./data/databases/*/; do
./build/baradadb repair --data-dir="$db" --dry-run
done
# 3. Стартиране
./build/baradadb
Сценарий 3: Ръчно разархивиране
tar -xzf backup_latest.tar.gz -C ./data
# Архивът съдържа: databases/<име>/ + backup.json
Изисквания за Съхранение
| Тип Backup | Размер | Честота | Задържане |
|---|---|---|---|
| Пълен tar.gz | ~1× размер на данните | Седмично | 4 седмици |
| Инкрементален | ~0.05× размер на данните | На всеки час | 24 часа |
| WAL архив | ~0.02× размер на данните / ден | Непрекъснато | 7 дни |
Най-добри Практики
- Използвайте
--all-databasesза пълен backup в multi-DB сетъп - Тествайте възстановяването редовно — Backup, който не може да бъде възстановен, е безполезен
- Пускайте repair след некоректно спиране
- Съхранявайте backups извън локацията — S3, GCS или друг сървър
- Използвайте incremental + checkpoint — За чести консистентни snapshot-ове
- Мониторирайте
/backupsendpoint — През админ панела или API