
Zimny backup jest już metodą archaiczną, produkcyjnie wykorzystuje się gorący backup. Niemniej warto znać zasadę jego działania dla lepszego zrozumienia działania gorącego backupu.
Zimny backup na poziomie fizycznym sprowadza się do wyłączenia klastra, skopiowania plików klastra i włączeniu z powrotem. Taki backup pozwoli na odtworzenie klastra do punktu czasowego, w którym został zrobiony backup - co jest jego ogromną wadą. Nie jest jednak wymagane włączanie archiwizacji ciągłej, dzięki czemu nie powstaje nam mnóstwo zarchiwizowanych plików WAL. Pamiętajmy, że backup na poziomie fizycznym dotyczy zawsze całego klastra. Nie możemy na jego podstawie przywracać np. wybranych baz danych. Jeśli potrzebujemy kopii zapasowej konkretnej bazy lub wybranych tabel, należy użyć pg_dump. Przejdziemy teraz scenariusz, w którym stworzymy tabelę, wykonamy kopię zapasową, skasujemy tabelę i odtworzymy całość z backupu. Klaster trzeba będzie wyłączyć, by zapewnić sobie spójność danych podczas wykonywania backupu. Istnieje możliwość wykonywania również gorącego backupu, ale wymaga to włączenia archiwizacji ciągłej, co omówimy nieco później. Zaczniemy więc od stworzenia tabeli i zapełnienia jej danymi. Wywołujemy też checkpoint, żeby na pewno wszystkie zmiany zostały utrwalone w plikach danych:
create table do_skasowania(x integer);
insert into do_skasowania select generate_series(1,10000000);
checkpoint;
Sprawdzamy jeszcze, czy tabela istnieje i ile zajmuje miejsca:
Po tej operacji zatrzymujemy klaster, tworzymy jego kopię zapasową i przywracamy klaster do działania:
pg_ctl -D /data_pg stop
mkdir /tmp/cold_backup
cp -R /data_pg/* /tmp/cold_backup
pg_ctl -D /data_pg start
W zależności od wielkości bazy może to potrwać jakiś czas.
W kopii zapasowej znajduje się więc nasza nowo utworzona tabela. Skasujmy tabelę i upewnijmy się, że jej tam nie ma:
drop table do_skasowania;
Przyszedł czas na odtwarzanie. W pierwszej kolejności musimy położyć klaster:
pg_ctl -D /data_pg/ stop
Teraz musimy przywrócić stan klastra z kopii zapasowej. Uprzednio jednak należy usunąć aktualną zawartość PDATA. Po odtworzeniu podnosimy klaster:
rm -rf /data_pg/*
cp -R /tmp/cold_backup/* /data_pg
pg_ctl -D /data_pg start
Sprawdzamy, czy tabela została odzyskana:
psql
\dt+ do_skasowania
Jak widzimy, udało się odzyskać skasowaną tabelę z backupu.
Backup taki jest niezbyt dobrym rozwiązaniem przy produkcyjnych bazach danych, ponieważ odzyskujemy stan bazy z momentu zrobienia backupu. Od chwili backupu do awarii mogło upłynąć sporo czasu i tracimy w ten sposób dużo danych. Ponadto wykonanie takiego backupu wiąże się z wyłączeniem instancji, na co rzadko kiedy możemy sobie pozwolić. Oba problemy rozwiązuje gorący backup.
Komentarze (0)
Brak komentarzy...