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:
$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase
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
:
$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump
Następnie zaleca się uruchomienie ANALYZE
w bazie danych:
$ vacuumdb --analyze-only mydatabase
(jeśli możesz sobie pozwolić na czas, biegnij tylko --analyze
do VACUUM
bazy danych i zaktualizuj mapy widoczności)
Aktualizacja za pomocą pg_upgrade
Inną opcją jest użycie contribpg_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:
- Zrzut + przywracanie jest najbardziej niezawodny, ale ogólnie najbardziej powolny (równoległość może dać całkiem dobre wyniki)
- Pg_upgrade to jedna z najlepszych opcji na krótkie przestoje (jeśli możesz użyć, zobacz ograniczenia), często zajmuje to tylko kilka minut, nawet w przypadku dużych baz danych
- Replikacja wyzwalacza jest bez wątpienia tym, który zapewnia możliwie jak najmniej przestojów (prawie zero), ale jest naprawdę trudny do osiągnięcia i polecam tylko doświadczonym osobom (zarówno na PostgreSQL, jak i narzędziu do replikacji).
Mam nadzieję, że mógłbym pomóc. Powodzenia.