Przywracanie kopii zapasowej
Przywracaj bazy danych PostgreSQL IBM Bob z kopii zapasowej, aby odzyskać dane po utracie, przeprowadzić migrację środowisk lub powrócić do znanego dobrego stanu.
Użyj tej procedury, aby przywrócić bazy danych IBM Bob i powiązane bazy danych PostgreSQL z plików kopii zapasowych. Proces przywracania obejmuje weryfikację spójności kopii zapasowej, przygotowanie środowiska, ponowne utworzenie docelowej bazy danych, przywrócenie zawartości kopii zapasowej oraz weryfikację przywróconych danych przed ponownym włączeniem usług aplikacji.
Przywrócenie bazy danych zastępuje istniejącą zawartość bazy danych danymi z wybranego pliku kopii zapasowej. Usługi aplikacji muszą zostać zatrzymane przed rozpoczęciem, ponieważ aktywne operacje zapisu do bazy danych mogą uszkodzić proces przywracania. Zawsze testuj procedury przywracania w środowisku nieprodukcyjnym przed wykonaniem odzyskiwania na produkcji.
Zanim rozpoczniesz
Przed przywróceniem bazy danych sprawdź następujące kwestie:
Weryfikacja integralności kopii zapasowej
# Uzyskaj dostęp do PVC kopii zapasowej
oc run backup-verify -n <bob-instance-namespace> --image=busybox --rm -it --restart=Never \
--overrides='{
"spec": {
"containers": [{
"name": "backup-verify",
"image": "busybox",
"command": ["sh"],
"stdin": true,
"tty": true,
"volumeMounts": [{
"name": "backup",
"mountPath": "/backups"
}]
}],
"volumes": [{
"name": "backup",
"persistentVolumeClaim": {
"claimName": "bob-db-backup-pvc"
}
}]
}
}'
# Wewnątrz poda:
cd /backups/bob-db
gunzip -t backup_bob_20260902_020000.sql.gz # Testuj integralność gzip
cat backup_bob_20260902_020000.sql.gz.meta # Sprawdź metadanePotwierdzenie szczegółów kopii zapasowej
- Znacznik czasu kopii zapasowej zgadza się z oczekiwanym punktem przywracania.
- Nazwa bazy danych jest prawidłowa.
- Rozmiar kopii zapasowej jest rozsądny.
- Plik metadanych istnieje i jest czytelny.
Utworzenie kopii zapasowej przed przywracaniem
Przed przywróceniem utwórz kopię zapasową bieżącego stanu bazy danych:
oc exec -n <bob-instance-namespace> bob-db-1 -- \
pg_dump -U postgres bob | gzip > pre-restore-backup-$(date +%Y%m%d_%H%M%S).sql.gzProcedura przywracania
Zatrzymaj wszystkie usługi aplikacji IBM Bob, aby zapobiec zapisom do bazy danych podczas przywracania.
# Zmniejsz skalę usług Bob
oc scale deployment bob-admin-service --replicas=0 -n <bob-instance-namespace>
oc scale deployment bob-api-service --replicas=0 -n <bob-instance-namespace>
oc scale deployment bob-ui-service --replicas=0 -n <bob-instance-namespace>
# Sprawdź, czy pody zostały zakończone
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bobUtwórz tymczasowy pod przywracania, który ma dostęp zarówno do bazy danych PostgreSQL, jak i do lokalizacji pamięci masowej kopii zapasowych.
# Pobierz obraz PostgreSQL
POSTGRES_IMAGE=$(oc get cluster bob-db -n <bob-instance-namespace> -o jsonpath='{.spec.imageName}')
# Utwórz pod przywracania
oc run postgres-restore -n <bob-instance-namespace> --image=$POSTGRES_IMAGE --rm -it --restart=Never \
--overrides='{
"spec": {
"containers": [{
"name": "restore",
"image": "'$POSTGRES_IMAGE'",
"command": ["bash"],
"stdin": true,
"tty": true,
"env": [
{"name": "PGHOST", "value": "bob-db-rw"},
{"name": "PGPORT", "value": "5432"},
{"name": "PGUSER", "value": "postgres"},
{"name": "PGPASSWORD", "valueFrom": {"secretKeyRef": {"name": "bob-db-app", "key": "password"}}}
],
"volumeMounts": [{
"name": "backup",
"mountPath": "/backups"
}]
}],
"volumes": [{
"name": "backup",
"persistentVolumeClaim": {
"claimName": "bob-db-backup-pvc"
}
}]
}
}'Wewnątrz poda przywracania sprawdź plik kopii zapasowej i przetestuj połączenie z bazą danych:
# Wyświetl listę dostępnych kopii zapasowych
ls -lh /backups/bob-db/
# Sprawdź plik kopii zapasowej
BACKUP_FILE="/backups/bob-db/backup_bob_20260902_020000.sql.gz"
gunzip -t $BACKUP_FILE
echo "Backup file is valid"
# Sprawdź metadane
cat ${BACKUP_FILE}.meta
# Przetestuj połączenie z bazą danych
psql -c "SELECT version();"W większości scenariuszy odzyskiwania przywracaj do pustej bazy danych, aby upewnić się, że przestarzałe lub powodujące konflikty dane zostaną usunięte.
Ten krok trwale usuwa bieżącą zawartość bazy danych.
psql -c "DROP DATABASE IF EXISTS bob;"
psql -c "CREATE DATABASE bob;"Przywróć bazę danych, ładując zawartość kopii zapasowej do PostgreSQL:
# Wyodrębnij i przywróć kopię zapasową
gunzip -c $BACKUP_FILE | psql -d bob
# Może to potrwać kilka minut w zależności od rozmiaru kopii zapasowejPrzed ponownym uruchomieniem aplikacji sprawdź, czy przywracanie zakończyło się pomyślnie:
# Połącz się z przywróconą bazą danych
psql -d bob
# Sprawdź, czy tabele istnieją
\dt
# Sprawdź liczbę wierszy dla kluczowych tabel
SELECT COUNT(*) FROM users;
SELECT COUNT(*) FROM projects;
SELECT COUNT(*) FROM conversations;
# Sprawdź najnowsze dane
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;
# Wyjdź z psql
\qPo pomyślnej walidacji bazy danych uruchom ponownie usługi IBM Bob i pozwól im połączyć się ponownie z przywróconą bazą danych. Monitoruj dzienniki startowe aplikacji pod kątem błędów lub niepowodzeń migracji.
# Wyjdź z poda przywracania
exit
# Zwiększ skalę usług Bob
oc scale deployment bob-admin-service --replicas=1 -n <bob-instance-namespace>
oc scale deployment bob-api-service --replicas=3 -n <bob-instance-namespace>
oc scale deployment bob-ui-service --replicas=2 -n <bob-instance-namespace>
# Sprawdź, czy pody działają
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bob
# Sprawdź dzienniki aplikacji
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/name=bob --tail=50Przeprowadź kompleksową (end-to-end) weryfikację aplikacji przed umożliwieniem użytkownikom ponownego połączenia:
# Przetestuj punkty końcowe aplikacji
curl -k https://bob.example.com/health
# Sprawdź, czy logowanie użytkowników działa
# Sprawdź, czy dostęp do danych działa
# Sprawdź, czy kluczowe funkcje działająPomyślna walidacja wskazuje, że proces przywracania został zakończony.
Najlepsze praktyki
- Zawsze najpierw testuj w środowisku nieprodukcyjnym.
- Przed rozpoczęciem utwórz kopię zapasową bieżącego stanu bazy danych.
- Zweryfikuj integralność kopii zapasowej przed rozpoczęciem.
- Zaplanuj przestój i poinformuj użytkowników.
- Udokumentuj proces przywracania i jego wyniki.
- Zweryfikuj spójność danych po przywróceniu.
- Uważnie monitoruj aplikację po przywróceniu.
Typowe problemy z przywracaniem
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| Niewystarczająca ilość miejsca | Za mało miejsca na dysku na operację przywracania | Zwiększ rozmiar PVC lub zwolnij miejsce w pamięci masowej przed przywracaniem. |
| Przekroczenie limitu czasu połączenia (timeout) | Problemy z łącznością sieciową lub dostępnością bazy danych | Sprawdź łączność z bazą danych i w razie potrzeby zwiększ wartości limitu czasu. |
| Błędy uprawnień | Użytkownik przywracania nie ma wymaganych uprawnień do bazy danych | Nadaj wymagane uprawnienia użytkownikowi przywracania przed uruchomieniem operacji przywracania. |