pg_dump postgres-database van externe server wanneer poort 5432 is geblokkeerd

Ik probeer een SQL-database te pg_dumpen op een externe server in onze DMZ. Er zijn 2 problemen.

  1. er is niet veel ruimte meer op de externe server, dus de normale opdracht wordt uitgevoerd om lokaal een back-up van de database te maken
    pg_dump -C database > sqldatabase.sql.bakwerkt niet vanwege ruimteproblemen.

  2. Ik kan ook de andere versie van de pg_dump-opdracht niet uitvoeren om de database van een externe server naar een lokale server te dumpen met:

    pg_dump -C -h remotehost -U remoteuser db_name | psql localhost -U localuser db_name

omdat de server zich in onze DMZ bevindt en poort 5432 is geblokkeerd. Wat ik wil zien, is of het mogelijk is om de database pg_dump te maken en deze onmiddellijk (ssh of een andere vorm) als een bestand op een externe server op te slaan.
Wat ik probeerde was: pg_dump -C testdb | ssh [email protected] | > /home/admin/testdb.sql.bak

Weet iemand of wat ik probeer te bereiken mogelijk is?


Antwoord 1, autoriteit 100%

Je kunt verbinding maken met ssh met je externe server, doe met de pg_dump-aanroep verbinden en stuur de uitvoer terug naar stdout van de lokale machine.

ssh [email protected]_machine "pg_dump -U dbuser -h localhost -C --column-inserts" \
 > backup_file_on_your_local_machine.sql

Antwoord 2, autoriteit 46%

laten we een back-up maken van een externe postgresql-database met pg_dump:

pg_dump -h [host address] -Fc -o -U [database user] <database name> > [dump file]

later kan het op dezelfde externe server worden hersteld met:

sudo -u postgres pg_restore -C mydb_backup.dump

Bijvoorbeeld:

pg_dump -h 67.8.78.10 -Fc -o -U myuser mydb > mydb_backup.dump

volledig (alle databases en objecten)

pg_dumpall -U myuser -h 67.8.78.10 --clean --file=mydb_backup.dump

herstel van pg_dumpall –clean:

psql -f mydb_backup.dump postgres #it doesn't matter which db you select here

Gekopieerd van: https://codepad.co/snippet/73eKCuLx


Antwoord 3, autoriteit 5%

Je kunt proberen een deel van de tabel als volgt naar een bestand op je lokale machine te dumpen (aangenomen dat op je lokale computer psqlis geïnstalleerd):

psql -h ${db_host} -p 5432 -U ${db_user} -d ${db_name} \
-c "\copy (SELECT * FROM my_table LIMIT 10000) to 'some_local_file.csv' csv;"

En u kunt de geëxporteerde csv later als volgt in een andere db importeren:

COPY my_table FROM '/path/to/some_local_file.csv' WITH (FORMAT csv);

Antwoord 4, autoriteit 2%

Een mogelijke oplossing – pijp door ssh – is genoemd.

U kunt uw DB-server ook laten luisteren op het openbare inet-adres, een hostssl-vermelding voor uw back-upmachine toevoegen aan pg_hba.conf, misschien een clientcertificaat configureren voor beveiliging en dan gewoon de dump uitvoeren op de client/back-upmachine met pg_dump -h dbserver.example.com ...

Dit is eenvoudiger voor onbeheerde back-ups.

Voor de configuratie van de verbinding (sslmode) zie ook de ondersteunde omgeving variabelen.


Antwoord 5

Als u periodiek een back-up wilt maken van een database PostgreSQL die zich in een container in de externe server bevindt naar uw lokale host door pg_dumpover sshte gebruiken, is dit handig voor jou:

https://github.com/omidraha/periodic-pgdump-over-ssh

Other episodes