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.
postgresql
rzymski
źródło
źródło
Odpowiedzi:
Z instrukcji :
Tak, możesz zaufać kopii zapasowej. Oczywiście jest to PostgreSQL, możesz zaufać swoim danym w PostgreSQL.
źródło
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.
źródło
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ć:
Zasadniczo wszystko po
pg_dump
ustawieniu poziomu izolacji transakcji nie jest częścią tego zrzutu.W tym czasie operacje odczytu / zapisu nie są zmieniane (zablokowane).
źródło
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.
źródło