Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
PostgreSQL
Kopie przyrostowe i różnicowe w PostgreSQL - jak je robić
Kiedy baza rośnie do setek gigabajtów, codzienny pełny backup przestaje być praktyczny. Kopie przyrostowe i różnicowe pozwalają zapisywać tylko to, co się zmieniło, drastycznie skracając czas i zajętość dysku. Wyjaśnimy różnicę między tymi dwoma typami i pokażemy, jak wdrożyć je narzędziem pgBackRest.
Twój backup pełny bazy o rozmiarze kilkuset gigabajtów trwa wiele godzin i codziennie zapisuje niemal te same dane od nowa. Retencja tygodniowa oznacza siedem pełnych kopii, czyli wielokrotność rozmiaru bazy na dysku backupowym. Jednocześnie realnie zmienia się może kilka procent danych dziennie. Marnujesz miejsce i czas na kopiowanie tego, co się nie ruszyło. Chciałbyś zapisywać wyłącznie różnice, ale pg_dump tego nie potrafi.
Backup logiczny zawsze eksportuje całą zawartość bazy, bo operuje na poziomie danych, a nie plików. Nie ma pojęcia, które fragmenty zmieniły się od wczoraj. Kopie przyrostowe i różnicowe działają na poziomie fizycznym, porównując strony plików z kopią bazową. Różnica między nimi dotyczy punktu odniesienia. Kopia różnicowa zawiera wszystkie zmiany od ostatniej kopii pełnej. Kopia przyrostowa zawiera tylko zmiany od ostatniej kopii dowolnego typu, czyli od poprzedniego przyrostu.
Konsekwencja jest praktyczna. Przyrostowe są najmniejsze i najszybsze, ale odtworzenie wymaga pełnej kopii i łańcucha wszystkich przyrostów po niej. Różnicowe są większe, lecz do odtworzenia potrzeba tylko pełnej kopii i jednej różnicowej. pgBackRest, narzędzie open source rozwijane m.in. przy wsparciu Crunchy Data, obsługuje oba typy, sam pilnuje łańcucha zależności i potrafi wykrywać zmienione strony, więc nie musisz ręcznie liczyć różnic.
pgbackrest na serwerze bazodanowym (lub na dedykowanym repozytorium backupów) i utwórz plik konfiguracyjny pgbackrest.conf, wskazując katalog danych PostgreSQL oraz miejsce na repozytorium kopii.postgresql.conf parametr archive_mode = on oraz archive_command wywołujący pgbackrest archive-push. Kopie fizyczne bez archiwum WAL nie pozwolą na odtwarzanie do punktu w czasie.pgbackrest --stanza=nazwa stanza-create, a następnie sprawdź poprawność konfiguracji przez pgbackrest --stanza=nazwa check.pgbackrest --stanza=nazwa --type=full backup. To jedyny typ, który zapisuje wszystkie dane.--type=diff zapisze zmiany od ostatniej pełnej, a --type=incr zmiany od ostatniej dowolnej kopii. Typowy plan to pełna raz w tygodniu i przyrostowe albo różnicowe w pozostałe dni.repo-retention-full, na przykład na dwie kopie pełne. pgBackRest sam usunie stare kopie i powiązane z nimi przyrosty oraz WAL, pilnując, żeby nie zostawić osieroconego łańcucha.pgbackrest --stanza=nazwa restore, opcjonalnie z --type=time --target dla konkretnej chwili. Narzędzie samo złoży pełną kopię z odpowiednimi przyrostami - nie robisz tego ręcznie.Listę kopii i ich typy podejrzysz poleceniem pgbackrest --stanza=nazwa info - zobaczysz pełne, różnicowe i przyrostowe wraz z ich rozmiarem oraz rozmiarem repozytorium. To najlepszy dowód oszczędności: kopie przyrostowe będą wielokrotnie mniejsze od pełnej. Zwróć uwagę na rozmiar w polu backup size kontra repo size, bo pokazuje realne zajęcie miejsca po deduplikacji i kompresji. Poprawność łańcucha weryfikuje sam info, oznaczając zależności między kopiami. Ostateczny test to odtworzenie kopii przyrostowej na maszynie testowej i sprawdzenie liczby wierszy w tabelach zapytaniem SELECT count(*) - jeśli dane się zgadzają, znaczy że pgBackRest poprawnie złożył pełną kopię z przyrostami.
Wróć do listy: 100 najczęstszych pytań i problemów z PostgreSQL

Sprawdź szkolenie: Administracja, replikacja i tuning baz danych PostgreSQL
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Sprawdź szkolenie: Zaawansowana administracja PostgreSQL (HA, DR, monitoring, skalowanie)
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...