Backup PostgreSQL w kontenerze
Wykonasz i zweryfikujesz logiczny zrzut ćwiczeniowej bazy PostgreSQL uruchomionej przez Compose.
1. Krótka teoria
W ćwiczeniowym Compose usługa app-db przechowuje dane na nazwanym volume. pg_dump tworzy osobny logiczny zrzut jednej bazy; format custom -Fc można później odtworzyć przez pg_restore. Wykonaj polecenie z katalogu z plikiem Compose. Opcja exec -T wyłącza TTY, co jest ważne dla strumienia binarnego kierowanego do pliku na hoście. W powłoce Linux przekierowanie > zapisuje plik po stronie hosta, nie wewnątrz kontenera. Użyj katalogu poza repozytorium, z ograniczonym dostępem. Przed zadaniem sprawdź dostępną przestrzeń oraz uprawnienia. Najpierw utwórz wyłącznie testowe rekordy w bazie orders. Po zrzucie sprawdź kod wyjścia polecenia, rozmiar i listę obiektów przez pg_restore --list. Sama lista nie potwierdza poprawnego odtworzenia; to osobna lekcja. W automatyzacji zapewnij log wyniku, alarm po błędzie, retencję i test odtwarzania. Nie wpisuj hasła do polecenia ani do pliku lekcji: korzystaj z bezpiecznego mechanizmu przekazywania danych uwierzytelniających. pg_dump jednej bazy nie obejmuje automatycznie wszystkich ról ani innych baz klastra.
2. Przykłady komend
docker compose ps app-db
Potwierdza, że ćwiczeniowa baza działa przed zrzutem.
$ docker compose ps app-db
mkdir -p ../backups
Przygotowuje lokalizację testowej kopii poza katalogiem repozytorium.
$ mkdir -p ../backups
df -h ../backups
Sprawdza miejsce w lokalizacji docelowej.
$ df -h ../backups
docker compose exec -T app-db pg_dump -U orders -d orders -Fc > ../backups/orders-test.backup
Zapisuje zrzut ćwiczeniowej bazy w formacie custom na hoście Linux.
$ docker compose exec -T app-db pg_dump -U orders -d orders -Fc > ../backups/orders-test.backup
test -s ../backups/orders-test.backup
Sprawdza, że wynikowy plik nie jest pusty.
$ test -s ../backups/orders-test.backup
docker compose exec -T app-db pg_restore --list < ../backups/orders-test.backup
Czyta katalog obiektów zrzutu bez zmiany bazy.
$ docker compose exec -T app-db pg_restore --list < ../backups/orders-test.backup
sha256sum ../backups/orders-test.backup
Zapisuje sumę kontrolną pliku do porównania po przeniesieniu.
$ sha256sum ../backups/orders-test.backup
3. Zadanie praktyczne
orders tabelę backup_probe z dwoma fikcyjnymi wierszami i zanotuj ich liczbę. Sprawdź miejsce w ../backups, wykonaj pg_dump -Fc i sprawdź kod zakończenia, niepusty plik, spis obiektów oraz sumę kontrolną. Ustal, gdzie przechowywać kopię poza hostem, jak długo ją zachować i jaki alert wysłać po błędzie. Nie używaj danych produkcyjnych ani nie commituj pliku kopii.
4. Typowe błędy
- Zapis pliku wewnątrz nietrwałej warstwy kontenera zamiast na chronionym hoście.
- Użycie interaktywnego TTY przy przekierowaniu binarnego formatu custom.
- Brak kontroli kodu zakończenia pg_dump przed uznaniem pliku za kopię.
- Przechowywanie zrzutu w repozytorium albo bez ograniczenia dostępu.
- Założenie, że zrzut jednej bazy obejmuje role i wszystkie bazy klastra.
5. Podsumowanie
Zrzut pg_dump w formacie custom jest oddzielny od volume. Po zapisaniu na hoście sprawdź wynik polecenia, plik i katalog obiektów, a następnie bezpieczne przechowywanie. Pełna weryfikacja wymaga jeszcze odtworzenia na danych testowych.