Ik probeer een SQL-database te pg_dumpen op een externe server in onze DMZ. Er zijn 2 problemen.
-
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.bak
werkt niet vanwege ruimteproblemen. -
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 user@remote_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 psql
is 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_dump
over ssh
te gebruiken, is dit handig voor jou: