Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
PostgreSQL
Jak zrobić i odtworzyć backup bazy przez pg_dump
pg_dump to podstawowe narzędzie backupu logicznego w PostgreSQL. Jest przenośne, działa między wersjami i pozwala odtworzyć pojedynczą bazę albo jej fragment. Pokazujemy, jak zrobić backup we właściwym formacie i jak go bezbłędnie przywrócić, wraz z rolami i uprawnieniami.
Objaw to zwykle potrzeba, a nie awaria: migracja bazy na nowy serwer, kopia przed ryzykowną zmianą, przeniesienie pojedynczej bazy z klastra albo regularny backup logiczny obok kopii fizycznej. Często pojawia się też problem odwrotny - odtworzenie z dumpa się nie udaje, bo backup zrobiono w formacie plain (zwykły plik SQL), przez co nie da się odtwarzać równolegle ani wybierać pojedynczych obiektów, albo bo zapomniano o rolach i uprawnieniach.
pg_dump tworzy tak zwany backup logiczny: nie kopiuje plików bazy, tylko generuje komplet poleceń (albo dane w formacie wewnętrznym), które odtwarzają strukturę i zawartość bazy. Dzięki temu backup jest przenośny między systemami i wersjami PostgreSQL - w odróżnieniu od backupu fizycznego, który jest związany z konkretną wersją i architekturą.
Kluczowa sprawa jest format. Format plain to zwykły skrypt SQL, który odtwarzasz przez psql - prosty, ale bez selektywnego odtwarzania i równoległości. Format custom (i directory) to postać skompresowana, którą odtwarzasz przez pg_restore z możliwością wyboru obiektów i pracy wielowątkowej. Druga sprawa: pg_dump obejmuje jedną bazę, ale nie zapisuje obiektów globalnych klastra - ról, uprawnień i tablespace. Te zapisuje osobno pg_dumpall z opcją --globals-only. Pominięcie tego kroku to najczęstsza przyczyna niekompletnego odtworzenia.
pg_dump -h localhost -U postgres -F c -f baza.dump nazwa_bazy. Flaga -F c to format custom, który później odtworzysz elastycznie przez pg_restore.pg_dump -F d -j 4 -f katalog_backup nazwa_bazy. Opcja -j 4 uruchamia cztery równoległe procesy zrzutu.pg_dumpall --globals-only -f globalne.sql. Bez tego pliku odtworzona baza może nie mieć właścicieli i uprawnień.psql -f globalne.sql postgres. Dzięki temu istnieją już role, do których będą przypisane obiekty bazy.createdb nazwa_bazy, a następnie pg_restore -d nazwa_bazy -j 4 baza.dump. Równoległe -j 4 działa tylko dla formatów custom i directory.psql -d nazwa_bazy -f baza.sql. Pamiętaj, że tu nie zadziała równoległość ani wybór pojedynczych obiektów.Po odtworzeniu sprawdź, czy wszystkie obiekty są na miejscu. Porównaj liczbę tabel: SELECT count(*) FROM information_schema.tables WHERE table_schema = 'public'; na źródle i na kopii. Zwaliduj liczbę wierszy w kluczowych tabelach po obu stronach. Sprawdź, czy właściciele i uprawnienia się zgadzają, np. \dp w psql, oraz czy role istnieją: \du. Jeśli pg_restore zgłaszał ostrzeżenia, przejrzyj je - drobne komunikaty o brakujących rolach oznaczają zwykle pominięty plik globalnych obiektów. Na koniec wykonaj proste zapytanie biznesowe, aby potwierdzić, że dane są spójne.
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...