Odtworzenie PostgreSQL i test kopii
Odtworzysz zrzut do osobnej bazy testowej i sprawdzisz dane bez naruszania źródła.
1. Krótka teoria
Test odtwarzania ma odpowiedzieć na pytanie, czy kopia pozwala odzyskać użyteczne dane w założonym czasie. Pracuj wyłącznie na fikcyjnych rekordach i w odizolowanym środowisku Compose. Nie kieruj pg_restore do działającej bazy orders. Utwórz nową, pustą bazę orders_restore z szablonu template0; nazwa jednoznacznie odróżnia cel od źródła. Przed odtworzeniem odczytaj spis archiwum pg_restore --list. Format custom z poprzedniej lekcji wymaga pg_restore, a nie psql. Opcja --exit-on-error zatrzymuje proces po błędzie SQL, a --no-owner pomija odtwarzanie właściciela obiektów w teście z innymi rolami. Uprawnienia i rozszerzenia mogą wymagać osobnej kontroli w prawdziwym planie odzyskiwania. Po odtworzeniu sprawdź listę tabel, liczbę i treść przygotowanych wcześniej rekordów backup_probe oraz prosty odczyt aplikacji skierowanej na bazę testową. Zanotuj czas od rozpoczęcia do potwierdzenia działania i porównaj go z RTO. Jeżeli zapisane dwa rekordy nie wracają, test jest nieudany nawet przy kodzie 0 procesu. Ćwiczenie nie obejmuje nadpisania produkcji; taki krok wymaga osobnego runbooka, kontroli uprawnień i decyzji podczas rzeczywistego incydentu.
2. Przykłady komend
test -s ../backups/orders-test.backup
Potwierdza dostępność przygotowanego pliku testowego.
$ test -s ../backups/orders-test.backup
docker compose exec -T app-db pg_restore --list < ../backups/orders-test.backup
Sprawdza spis obiektów przed odtworzeniem.
$ docker compose exec -T app-db pg_restore --list < ../backups/orders-test.backup
docker compose exec -T app-db createdb -U orders -T template0 orders_restore
Tworzy osobną pustą bazę testową bez dotykania orders.
$ docker compose exec -T app-db createdb -U orders -T template0 orders_restore
docker compose exec -T app-db pg_restore --exit-on-error --no-owner -U orders -d orders_restore < ../backups/orders-test.backup
Odtwarza archiwum custom wyłącznie do nowej bazy testowej.
$ docker compose exec -T app-db pg_restore --exit-on-error --no-owner -U orders -d orders_restore < ../backups/orders-test.backup
docker compose exec -T app-db psql -U orders -d orders_restore -c '\dt'
Pokazuje tabele utworzone w bazie testowej.
$ docker compose exec -T app-db psql -U orders -d orders_restore -c '\dt'
docker compose exec -T app-db psql -U orders -d orders_restore -c 'SELECT count(*) FROM backup_probe;'
Porównuje liczbę fikcyjnych rekordów z liczbą przed zrzutem.
$ docker compose exec -T app-db psql -U orders -d orders_restore -c 'SELECT count(*) FROM backup_probe;'
docker compose exec -T app-db psql -U orders -d orders_restore -c 'SELECT id, label FROM backup_probe ORDER BY id;'
Potwierdza treść dwóch przygotowanych rekordów testowych.
$ docker compose exec -T app-db psql -U orders -d orders_restore -c 'SELECT id, label FROM backup_probe ORDER BY id;'
3. Zadanie praktyczne
backup_probe(id, label) z dwoma fikcyjnymi wierszami. Odczytaj archiwum, utwórz wyłącznie nową bazę orders_restore i odtwórz do niej zrzut. Porównaj liczbę oraz treść rekordów z notatką sprzed kopii. Skieruj osobną instancję ćwiczeniowej aplikacji na bazę testową i sprawdź jeden odczyt; nie zmieniaj połączenia działającej instancji. Zapisz czas testu, wynik i ewentualne błędy. Jeśli baza docelowa już istnieje, przerwij ćwiczenie i użyj innej nowej nazwy zamiast czyścić lub nadpisywać dane.
4. Typowe błędy
- Odtwarzanie do tej samej bazy, z której wykonano kopię.
- Użycie psql do archiwum custom zamiast pg_restore.
- Ignorowanie błędów pg_restore i ocenianie tylko obecności tabel.
- Sprawdzenie liczby rekordów bez porównania ich treści.
- Testowanie aplikacji przez zmianę połączenia działającej instancji.
5. Podsumowanie
Sprawdzony backup da się odtworzyć do pustej, odizolowanej bazy. Wynik ocenia się przez błędy procesu, schemat, oczekiwane rekordy, odczyt aplikacji i czas potrzebny na cały test. Źródłowa baza pozostaje nietknięta.