Czy uruchomienie pg_dump na żywo db tworzy spójne kopie zapasowe?


37

Mam bazę danych o pojemności 3 GB, która jest stale modyfikowana i muszę wykonywać kopie zapasowe bez zatrzymywania serwera (Postgres 8.3).

Mój pg_dump działa przez 5 minut. Co się stanie, jeśli dane zostaną zmodyfikowane podczas procesu? Czy otrzymuję spójne kopie zapasowe? Nie chcę się dowiedzieć, kiedy nastąpi katastrofa.

Dokumentacja Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html nic na ten temat nie mówi.


4
Cześć Roddick. Zdecydowanie zalecamy przetestowanie procesu przywracania przed katastrofą. Skonfiguruj inny komputer i przywróć za pomocą jednej z kopii zapasowych, aby go przetestować.
Derek Downey

Odpowiedzi:


53

Z instrukcji :

Tworzy spójne kopie zapasowe, nawet jeśli baza danych jest używana jednocześnie.

Tak, możesz zaufać kopii zapasowej. Oczywiście jest to PostgreSQL, możesz zaufać swoim danym w PostgreSQL.


10
Dosłownie LOL'd, gdy czytam „możesz zaufać swoim danym w PostgreSQL” :)
François Beausoleil

Przydałby się link do instrukcji
Pablo Fernandez

1
@PabloFernandez: Gotowe!
Frank Heikens

1
Jednak logiczna kopia zapasowa w bazie danych na żywo zablokuje twoje tabele, nie przegap tych informacji. Być może znajdziesz kilka wskazówek: compose.com/articles/...
Tryp

Więc proszę, co jest w tym takiego zabawnego? Czy powinienem przestać używać Postgresql?
777

12

pg_dump rozpoczyna transakcję, podobnie jak każde inne długo działające zapytanie. Gwarancje spójności pochodzą z wdrożenia MVCC . Zrzut zawsze będzie zgodny z tymi zasadami.

Wszystkie rozmyte części MVCC są wokół takich rzeczy, jak to, w jaki sposób transakcje UPDATE stają się widoczne dla innych klientów i jak są uzyskiwane blokady. pg_dump jest ściśle związany z kolejnością i uzyskuje blokadę odczytu w całej bazie danych, aby ją zrzucić. Dla większości ludzi tego właśnie oczekują, a zastosowany mechanizm nigdy nie powoduje żadnych problemów. Głównym ryzykiem współbieżności jest to, że klienci próbujący zmienić strukturę bazy danych zostaną zablokowani podczas działania zrzutu. Nie wpływa to jednak na jakość zrzutu.


11

Zrzut zaczyna się od ustawienia TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Przeczytaj instrukcję izolacji transakcji i na przykład dyskusję na ten temat na liście użytkowników .

Zacytować:

Kopia zapasowa będzie widzieć tylko transakcje, które zostały zatwierdzone przed ustawieniem poziomu izolacji.

Zasadniczo wszystko po pg_dumpustawieniu poziomu izolacji transakcji nie jest częścią tego zrzutu.

W tym czasie operacje odczytu / zapisu nie są zmieniane (zablokowane).


-1

Najpierw przepraszam za odpowiedź na ten stary wątek. Ale z własnego doświadczenia nie mogę potwierdzić stwierdzenia, że ​​można ufać pg_dump /

Kilka miesięcy temu zmieniłem projekt na postgres. I oczywiście wszystkie kopie zapasowe wykonałem przy pomocy pg_dump z systemu live, zgodnie z sugestią. Ale po pierwszym sprawdzeniu kopii zapasowej zorientowałem się, że wszystkie zrzuty mają różne rozmiary. Po przywróceniu losowych niektórych z nich zorientowałem się, że brakuje niektórych tabel. Zacząłem więc analizować, dlaczego tak się dzieje, i zorientowałem się, że jeśli nakładająca się aplikacja, np. Serwery aplikacji, blokujące niektóre tabele i pg_dump nie czeka na ich wydanie. Byłem potrzebny za każdym razem, aby zatrzymać serwer na okres tworzenia kopii zapasowej, co nie jest dobrym rozwiązaniem.

Wciąż szukam rozwiązania, ale jak powiedziałem, całkowicie nie zgadzam się ze stwierdzeniem, że można ufać pg_dump.


Gdyby tak się stało, byłoby to poważne w pg_dump. Jakiej wersji używasz? Moje pytanie było 3 lata temu, a teraz jestem na 9.3 i Amazon Reds, który wykonuje kopie zapasowe na żywo najwyraźniej przy użyciu pg_dump. Nie mogą się mylić.
Rzym,

Możesz zaufać pg_dump, aby wykonać serializowane kopie zapasowe (zobacz moją odpowiedź na linki / dokumenty i kilka szczegółów). Jednak podczas moich odczytów przeczytałem, że nie powinieneś zmieniać struktury samego DB, chociaż nie byłem w stanie zagłębić się w to głębiej . Ponieważ wykonujemy tylko operacje wstawiania / aktualizacji / usuwania, nie mogę komentować tworzenia tabel. Po prostu upewniłem się, że nie tworzę tabel w czasie pg_dump.
Dennis Nolte,

2
Twoje stwierdzenia albo wskazują na poważny błąd (czy zgłosiłeś raport o błędzie?), Poważny błąd w sposobie zrzucania bazy danych, albo jakieś nieporozumienie. Brak jakichkolwiek faktów nie jest jednym z nich.
dezso,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.