Mam mój serwer produkcyjny (ubuntu 13.10) działający z postgresql 9.1.
Chcę użyć kilku funkcji 9.3, dlatego chcę zaktualizować.
Czy ktoś może mi pomóc w aktualizacji z wersji 9.1 do wersji 9.3, aby przestój wynosił nie więcej niż 30 minut. lub tak?
Podstawową troską jest zapobieganie utracie danych lub redundancji plików.
postgresql
postgresql-9.1
Ram Kumar
źródło
źródło
Odpowiedzi:
Istnieją zasadniczo trzy sposoby uaktualnienia PostgreSQL z różnych głównych wersji (np. 9.1 do 9.3).
Aktualizacja za pomocą pg_dump
Pierwszym i zalecanym, jeśli to możliwe, jest zrzucenie starej wersji (9.1) przy użyciu pliku binarnego nowszej wersji (9.3) i przywrócenie jej w nowym klastrze utworzonym z nowszej wersji.
Podejście to jest na ogół wolniejsze, ale także najbardziej realne. Jedną wskazówką, aby przyspieszyć, jest stosowanie współbieżności. Aby zrzucić zadania równoległe, możesz:
Musisz to zrobić dla każdej bazy danych, dopasować
--jobs=4
wartość do dowolnej wartości (przetestuj wartości od 2 do liczby rdzeni i sprawdź, która daje większą prędkość). Ponadto w tej fazie nikt nie powinien być połączony z bazą danych, każda modyfikacja spowoduje uszkodzenie zrzutu (z powodu niezabezpieczonej opcji--no-synchronized-snapshots
).Następnie możesz przywrócić zrzut do nowej instancji za pomocą
pg_restore
:Następnie zaleca się uruchomienie
ANALYZE
w bazie danych:(jeśli możesz sobie pozwolić na czas, biegnij tylko
--analyze
doVACUUM
bazy danych i zaktualizuj mapy widoczności)Aktualizacja za pomocą pg_upgrade
Inną opcją jest użycie contrib
pg_upgrade
. Ta--link
metoda zapewnia naprawdę szybki sposób aktualizacji PostgreSQL.Przed użyciem musisz wykonać kopię zapasową całego katalogu danych, ponieważ w
--link
trybie, jeśli coś pójdzie nie tak, możesz stracić oba dane (nowe i stare). Przeczytaj także wszystkie dokumenty, a zwłaszcza notatki na dole (istnieją pewne ograniczenia dotyczące pg_upgrade).AKTUALIZACJA: Użyj
--check
opcji przed uruchomieniem ostatecznego polecenia. Ponadto w przypadku dużych baz danych zaleca się uruchomienie tego polecenia w sesji ekranowej.Uaktualnij za pomocą narzędzia replikacji opartego na wyzwalaczu
Inną opcją uaktualnienia wersji jest użycie narzędzia replikacji opartego na wyzwalaczu. Jak Slony, Bucardo i Londiste.
Jest to opcja, która wymaga jak najmniej przestojów, ale jest najtrudniejsza do pracy.
Aby to zrobić, musisz zbudować master-slave, w którym master jest twoją bieżącą wersją (9.1), a slave jest nową wersją (9.3). Następnie czekasz na pierwszą synchronizację (z systemem nadal produkowanym), a następnie zamykasz wszystkich podłączonych do bazy danych (tutaj zaczyna się przestój), czekasz na nadrobienie zaległości, awansujesz (niewolnik) do opanowania i przekieruj wszystkich klientów / aplikacji do tej nowej wersji. I jesteś skończony.
Dokumentacja Slony zapewnia krok po kroku aktualizację PostgreSQL przy użyciu Slony .
Który wybrać
Cóż, jak zawsze zależy, wznawiając:
Mam nadzieję, że mógłbym pomóc. Powodzenia.
źródło
pg_dumpall
do zrzucenia wszystkich baz danych za jednym razem.Aby zaktualizować Postgres 9.1 do 9.3, wykonaj następujące kroki:
Najpierw utwórz plik /etc/apt/sources.list.d/pgdg.list z następującą zawartością dla Ubuntu:
Dodaj klucz działający w następujący sposób:
Zainstaluj narzędzia programistyczne z postgres:
Aby potwierdzić naszą instalację, wprowadzimy „sudo pg_lsclusters” i zobaczymy uruchomione dwie wersje PostgreSQL.
Zatrzymaj usługę Postgressql:
Usuń domyślny klaster 9.3 utworzony przez instalację 9.3.
Utwórz nowy klaster 9.3 z istniejącego klastra 9.1.
Potwierdź, że nowy klaster się ładuje i korzystamy z PostgreSQL 9.3.
Jeśli wszystko działa, upuść do klastra 9.1.
Aby uzyskać więcej informacji, zapoznaj się z tym linkiem
źródło
To może być bardzo przydatne:
https://gist.github.com/ibussieres/11262268
Jest na 12.04, ale domyślam się, że można go z łatwością przenieść.
źródło