Tomasz Kaczmarski

Tomasz Kaczmarski Konsultant SAP Basis

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Witam,

Potrzebuję skopiować bazę danych PostgreSQL pomiędzy jednym serwerem a drugim. Na jednym jest zainstalowana baza Postgres w wersji 8, oparta o system Windows(system x86), na drugim serwerze jest Windows 2012(system x64) z bazą w wersji 9.3.

W jaki sposób najszybciej mogę to zrobić ? Baza danych zajmuje w sumie około 100GB, czyli klasyczny backup/restore chyba odpada ze względu na czas trwania. Słyszałem kiedyś o możliwości przekopiowania plików offline, ale nigdy tego nie robiłem ? Pytanie jeszcze co z różnicami w wersjach bazy, czy to nie przeszkodzi ?
Dzięki wielkie za pomoc :)

Pzdr,
T.

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Robiłem kopiowanie plików i działało (pamiętam, że było nieco zamieszania z plikami WAL), ale tylko na "równobitowych" maszynach. Próba przeniesienia katalogu data z maszyny 32bit na 64bit zakończyła się błędami.

A pg_dump "na żywca" przez sieć?
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname

konto usunięte

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Przekopiowanie plików jest możliwe *TYLKO* gdy jest ta sama architektura sprzętowa i system operacyjny. W tym przypadku to odpada. Pozostaje dump & restore. Albo też replikacja, która będzie to sobie robiła, aż zrobi, a bazę będzie można normalnie używać.

Używana baza o wielkości 100GB, z dużą ilością zapisów i zmian potrafi mieć sporo śmieci w środku (czyt. stron w plikach, które są oznaczone jako puste). I to zarówno w indeksach, jak też w plikach z danymi. Nie wiem jaki masz sprzęt, ale lata temu w takiej bazie spakowany dump robił mi się godzinę i zajmował jakieś 4GB. Zwłaszcza indeksy się pięknie kompresują - niezależnie od ich rozmiaru na dysku kopiują się ładnie do jednej linijki tekstu.

Wgrywanie tego dumpa potrafi być całkiem długie, wtedy to było ok. 4 godziny. Można na noc zapuścić i rano cieszyć się nową bazą.

Jedyny problem jaki widze, to okrutnie stara wersja, możliwe, że dump & restore od razu do wersji 9.3 będzie sprawiał jakieś problemy.

Aha, dumpa należy zrobić pg_dumpem z wersji 9.3.
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Masz klaster bazy przygotowany przez engine w wersji 8.x. Przekopiowanie plików i uruchomienie klastra z engine w wersji 9.x to nadal wersja klastra 8.x. Engine nowej gałęzi PostgreSQL nie będzie się o to awanturował ale przy bardziej złożonej bazie powstaną problemy (np. róznice w sposobie zapisywania podstawowych typów jak int, varchar).

PostgreSQL zaleca przechodzenie pomiędzy gałęziami tylko i wyłącznie przy pomocy dump & restore. Wtedy będziesz miał engine 9.x i klaster bazy 9.x

Polecam zrobienie dump w trzech krokach:
1. Zrzut użytkowników, grup, haseł, itp.
pg_dumpall -v -U {uzytkownik} -h {host} -p {port} -g -o -l {baza danych} --disable-dollar-quoting --disable-triggers --quote-all-identifiers -f global.sql

2. Zrzut struktury obiektów bazy (schematy, tabele, widok, itp.)
 pg_dump -v -U {uzytkownik} -h {host} -p {port} -s -E UTF8 -o --disable-dollar-quoting --disable-triggers --quote-all-identifiers -f structure.sql {baza danych}
Uwaga: Tu dump do kodowania UTF-8.

3. Zrzut samych danych
pg_dump -v -U {uzytkownik} -h {host} -p {port} -a -E UTF8 -o --disable-dollar-quoting --disable-triggers --quote-all-identifiers -f data.sql {baza danych}
Uwaga: Tu dump do kodowania UTF-8.

Odtwarzanie w nowej wersji bazy (zakładam, że stworzono wcześniej użytkownika oraz bazę danych o takich samych nazwach jak w starszej wersji):
1. Odtwarzanie użytkowników, grupy, itp.
psql -U {uzytkownik} -h {host} -p {port} -f global.sql

2. Odtwarzanie struktury bazy
psql -U {uzytkownik} -h {host} -p {port} -f structure.sql

3. Odtwarzanie danych
psql -U {uzytkownik} -h {host} -p {port} -f data.sql

Uwaga! Powyższa kolejność musi być zachowana.

Tak jak pisze przedmówca należy użyć narzędzi (pg_dump, psql) z nowej gałęzi PostgreSQL. Jeżeli użyjesz starych to nie uda się zrobić restore'a. Korzystanie z programów typu pgAdmin, Navicat czy innych zdecydowanie odradzam przy tej operacji.Ten post został edytowany przez Autora dnia 24.11.14 o godzinie 23:33

konto usunięte

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Klaster? PostgreSQL polega na systemie operacyjnym jeżeli chodzi o cache. Czyli klaster to to nie jest. Ewentualnie replikacja master-master. No, ale to coś innego... Enterprise DB ma clustering, ale właśnie dlatego, że mają zrobione pełne zarządzanie cache i węzły mogą się na wzajem wymieniać informacją o tym, co który akurat ma w pamięci.
Tomasz Kaczmarski

Tomasz Kaczmarski Konsultant SAP Basis

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

bardzo wszystkim dziękuje za pomoc, jednak nie wiem czy w tej sytuacji uda mi się zatrzymać aplikację na tak długi czas - backup bazy + restore w jednym ciągu.
Może w takim razie z innej beczki, czy jest szansa zrobienia czegoś w stylu znanym z Oracle lub SQL Serwer, mianowicie:
- zatrzymuję bazę na starym serwerze
- robię kopie bazy na starym serwerze
- po kopii startuje bazę na starym serwerze
- przekopiowuję plik backupu na nowy serwer
- robie restore na nowym serwerze
- po restorze na nowym serwerze znowu zatrzymuję baze na starym serwerze i robie backup logów ?
- przenosze tylko logi na nowy serwer a nastepnie robie ich restore, co trwa zdecydowanie krócej.

Dzięki temu czas zatrzymania środowiska produkcyjnego jest dużo krótszy, pytanie czy byłoby to możliwe i ewentualnie jak bardzo skomplikowanej konfiguracji wymaga ?

Pozdrawiam,
T.

konto usunięte

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Po staremu Slony. Na starym serwerze robisz backup, startujesz slony'ego. On odkłada wszystkie zmiany... Podnosisz nową bazę, importujesz dumpa, co tam potrzeba. Potem podpinasz się jako slave do starego serwera / master. Zaciąga zmiany i tyle.

Po nowemu - https://wiki.postgresql.org/wiki/Hot_Standby - robisz backup, startujesz mastera, odkłada logi. Wciągasz backup, podpinasz się jako slave, zaciąga logi...
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Michał Z.:
Klaster? PostgreSQL polega na systemie operacyjnym jeżeli chodzi o cache. Czyli klaster to to nie jest. Ewentualnie replikacja master-master. No, ale to coś innego... Enterprise DB ma clustering, ale właśnie dlatego, że mają zrobione pełne zarządzanie cache i węzły mogą się na wzajem wymieniać informacją o tym, co który akurat ma w pamięci.

http://www.postgresql.org/docs/9.3/static/app-initdb.html => "A database cluster is a collection of databases that are managed by a single server instance."
Używam to to co przeczytałem o PostgreSQL...

konto usunięte

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Marcin M.:
Michał Z.:
Klaster? PostgreSQL polega na systemie operacyjnym jeżeli chodzi o cache. Czyli klaster to to nie jest. Ewentualnie replikacja master-master. No, ale to coś innego... Enterprise DB ma clustering, ale właśnie dlatego, że mają zrobione pełne zarządzanie cache i węzły mogą się na wzajem wymieniać informacją o tym, co który akurat ma w pamięci.

http://www.postgresql.org/docs/9.3/static/app-initdb.html => "A database cluster is a collection of databases that are managed by a single server instance."
Używam to to co przeczytałem o PostgreSQL...

Wejdź na stronę Oracle. Poczytaj. Powiem tak - nie idźmy tą drogą. ;)
Dla mnie, tak jak napisałem multi-master i cluster to coś innego. Cluster to takie coś, co pozwala na odpalenie zadania na dowolnym węźle. W sensie ogólny scheduler dla całego clustra. W ten sposób kilka maszyn może być traktowana jako jedna. No, przynajmniej z taką definicją się spotkałem...

Nie rozumiem po co ta nazwa się pojawiła. Skoro wystarczy powiedzieć, że jest baza danych.
Może chodziło o to, żeby wyszło poważniej. Tej drogi też raczej nie polecam... No, ale - każdy wybiera sam.

konto usunięte

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

No ale dyskusja jest o Postgresie. To, że Oracle i Postgres inaczej nazywają takie same rzeczy, to cóż, trudno, trzeba z tym żyć. A to, że jakieś słowo ma inne znaczenia, to też trudno. W Postgresie baza danych to nie to samo co odpalony program Postgres. W Oraclu odpalasz program i masz już bazę. W Postgresie odpalasz program i musisz sobie stworzyć bazę.
Daniel Podlejski

Daniel Podlejski DBA,
SysAdmin/DevOps,
backend developer

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Michał:
http://en.wikipedia.org/wiki/Data_cluster
A żeby było jeszcze ciekawiej: http://en.wikipedia.org/wiki/Cluster
Cluster ma różne znaczenie, nie tylko w zależności od dziedziny, ale też od kontekstu - więc po prostu się czepiasz.

konto usunięte

Temat: PostgrSQL - kopia bazy danych pomiędzy serwerami.

Daniel.... Po co się ograniczać? Cloud! Kupiłem ostatnio NASa - ponoć personal cloud. Generalnie zwykły nas + dostęp do dropboxa. No więc trzeba mówić z miejsca "masz di bi clouda" i wtedy, z miejsca dostajesz +10 do respektu, na dzielni. Chyba, że dzielnica taka, że najpierw biją a potem pytają...

Zawsze ceniłem PG za to, że dokładnie wiedzieli co chcą robić. To co robili robili świetnie, a jak czegoś nie robili było to dokładnie wyjaśnione. Można było się obrażać, ale z miejsca było wiadomo za co i dlaczego tak właśnie jest. No, w każdym razie nikt nie bawił się marketingowe gierki słowne. Jak ktoś nie widzi różnicy między multi-master a cluster to ja nic na to nie poradzę.

A na twierdzenie, że różnie ludzie coś tam nazywają. MySQL z myisam to relacyjna baza danych jest. Co więcej są porównania wydajności, z PG. No, ale że dane trafiają do ramu i jak przyjdzie czas to na dysk... tego już nikt nie mówi. Wpienia mnie takie przeinaczanie. Skoro więc jako klient, gadam z konkretną maszyną. Jak dodam kolejny węzeł - trzeba o tym jakoś powiadomić klientów, żeby wiedzieli, że można z nim gadać. Znaczy - multi-master. Tak, można się do clustra zbliżać, ale - wprowadza się ograniczenia, pośredników... Co więcej zaryzykuję tezę, że PG nigdy nie będzie tego miał zrobionego, bo wtedy EnterpriseDB straciłoby sporo klientów. A PG też by straciło, na finansowaniu. BTW: Silnik PG chodzi na chmurze, właśnie EnterpriseDB ma takie coś. No więc jak ktoś chce cluster i to taki, który wszyscy zrozumieją tak samo, do tego lubi PG - to jest rozwiązanie.

No więc ja to tak widzę. EOT.

Następna dyskusja:

Forum Bazy Danych




Wyślij zaproszenie do