Chcę skopiować produkcyjną bazę danych PostgreSQL na serwer programistyczny. Jaki jest najszybszy i najłatwiejszy sposób na zrobienie tego?
źródło
Chcę skopiować produkcyjną bazę danych PostgreSQL na serwer programistyczny. Jaki jest najszybszy i najłatwiejszy sposób na zrobienie tego?
Nie musisz tworzyć pliku pośredniego. Możesz to zrobić
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
lub
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname
za pomocą psql
lub pg_dump
do połączenia ze zdalnym hostem.
W przypadku dużej bazy danych lub wolnego połączenia zrzucanie pliku i przesyłanie skompresowanego pliku może być szybsze.
Jak powiedział Kornel, nie ma potrzeby zrzucania do pliku pośredniego, jeśli chcesz pracować skompresowany, możesz użyć skompresowanego tunelu
pg_dump -C dbname | bzip2 | ssh remoteuser@remotehost "bunzip2 | psql dbname"
lub
pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"
ale to rozwiązanie wymaga również sesji na obu końcach.
Uwaga: pg_dump
służy do tworzenia kopii zapasowych i psql
przywracania. Tak więc pierwszym poleceniem w tej odpowiedzi jest skopiowanie z lokalnego na zdalny, a drugim z zdalnego na lokalny . Więcej -> https://www.postgresql.org/docs/9.6/app-pgdump.html
ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname
?Następnie skopiuj kopię zapasową na serwer programistyczny i przywróć za pomocą:
źródło
Użyj pg_dump , a później psql lub pg_restore - w zależności od tego, czy wybierzesz opcje -Fp czy -Fc dla pg_dump.
Przykład użycia:
źródło
Jeśli chcesz przeprowadzić migrację między wersjami (np. Zaktualizowałeś postgres i masz wersję 9.1 uruchomioną na localhost: 5432 i 9.3 działającą na localhost: 5434), możesz uruchomić:
Sprawdź dokumenty dotyczące migracji .
źródło
pg_basebackup
wydaje się być lepszym sposobem na zrobienie tego teraz, szczególnie w przypadku dużych baz danych.Możesz skopiować bazę danych z serwera z tą samą lub starszą wersją główną. Lub ściślej :
Do tego potrzebujesz na serwerze źródłowym:
listen_addresses = '*'
aby móc połączyć się z serwera docelowego. Upewnij się, że port 5432 jest w tym przypadku otwarty.max_wal_senders = 1
(-X fetch
),2
dla-X stream
(domyślnie w przypadku PostgreSQL 12) lub więcej.wal_level = replica
lub wyższy, aby móc ustawićmax_wal_senders > 0
.host replication postgres DST_IP/32 trust
wpg_hba.conf
. Zapewnia to dostęp dopg
klastra każdemu zDST_IP
komputera. Możesz skorzystać z bezpieczniejszej opcji.Zmiany 1, 2, 3 wymagają ponownego uruchomienia serwera, zmiana 4 wymaga ponownego załadowania.
Na serwerze docelowym:
źródło
Uruchom to polecenie z nazwą bazy danych, którą chcesz wykonać kopię zapasową, aby wykonać zrzut bazy danych.
Teraz scp ten plik zrzutu do zdalnego komputera, na którym chcesz skopiować DB.
Na zdalnym komputerze uruchom następującą komendę w folderze ~ / some /, aby przywrócić bazę danych.
źródło
Miałem sporo problemów i ostatecznie metoda, która pozwoliła mi sprawić, że działa z Rails 4, była:
na starym serwerze
Musiałem użyć użytkownika Linuksa Postgres, aby utworzyć zrzut. musiałem także użyć -c, aby wymusić utworzenie bazy danych na nowym serwerze. --inserts mówi, aby używał składni INSERT (), która w innym przypadku nie działałaby dla mnie :(
następnie na nowym serwerze, simpy:
aby przesłać plik dump.sql między serwerem, po prostu użyłem „cat” do wydrukowania zawartości, a następnie „nano” do odtworzenia jej podczas kopiowania zawartości.
Ponadto ROLA, której używałem w dwóch bazach danych, była inna, więc musiałem znaleźć-zastąpić całą nazwę właściciela na zrzucie.
źródło
Zrzuć bazę danych:
pg_dump database_name_name > backup.sql
Zaimportuj bazę danych z powrotem:
psql db_name < backup.sql
źródło
Pozwól mi udostępnić skrypt powłoki systemu Linux, aby skopiować dane tabeli z jednego serwera na inny serwer PostgreSQL.
Referencje zaczerpnięte z tego bloga:
Linux Bash Shell Script do migracji danych między serwerami PostgreSQL:
Właśnie migruję dane; utwórz pustą tabelę na docelowym / drugim serwerze bazy danych.
To jest skrypt narzędziowy. Ponadto można zmodyfikować skrypt do ogólnego użytku, na przykład dodając parametry dla nazwy hosta, nazwy bazy danych, nazwy tabeli i innych
źródło
Zaakceptowana odpowiedź jest poprawna, ale jeśli chcesz uniknąć interaktywnego wprowadzania hasła, możesz użyć tego:
źródło