Come ottenere un backup e test DB PostgreSQL funzionante e completo


45

Speravo di ottenere una risposta chiara su come garantire l'esecuzione di un backup completo di Postgres proprio come si farebbe con MS SQL Server, e quindi prendersi cura degli utenti orfani.

Da quello che ho letto, e potrebbe essere sbagliato, trovare un buon blog PostgreSQL è stato impegnativo, quindi non esitare a consigliarmi alcuni, devo capire come funziona questa app in modo da poter avere fiducia nei miei backup e Slony replica. Ho avuto uno sviluppatore per ripristinare un backup che ho preso da PgadminIII tramite custom, directorye il tarformato durante la selezione di OIDs, ma ha detto che due di loro non si caricavano, tarma era solo la directory, non i dati. Sono davvero confuso ora.

  1. Sto usando PGAdminIII, ha un'opzione pg_dumpe pg_dumpall. Voglio eseguire il backup di tutto ciò di cui ho bisogno per testare il ripristino di questo database da qualche parte e verificare che sì, tutti i dati di cui abbiamo bisogno e il nostro backup sia buono. Alla fine voglio scrivere uno script di ripristino automatico, ma un giorno alla volta.

pg_dumpalla quanto pare ha -globalsun'opzione che dovrebbe eseguire il backup di tutto, ma l'aiuto per pg_dumpallmostra una -g, --globals-only dump only global objects, no databases, non --globalsun'opzione.

Ho pensato di pg_dumpallfare almeno il backup delle chiavi esterne, ma anche questa sembra essere un'opzione. Secondo la documentazione , anche se pg_dumpallho bisogno di utilizzare -oun'opzione per il backup di chiavi esterne, non riesco davvero a immaginare quando non vorrei fare il backup di chiavi esterne e questo avrebbe più senso come opzioni predefinite.

  1. Come mi prendo cura degli utenti orfani e convalidare che ho tutto? Vorrei davvero ripristinare il mio file di backup su un altro server e verificare che tutto funzioni. Se qualcuno ha qualche suggerimento su come eseguire un backup reale in PostgreSQL e ripristinarlo, sarei molto grato.

Avevo un server PostgreSQL ma non riesco ancora a capire perché l'app non esegua il backup OIDdi default! Sembra che il 99,9% delle volte lo vorrai.

AGGIORNAMENTO 1:

La documentazione di Postgres menziona che l' globalsopzione che stavo cercando sembra essere un'opzione predefinita su questa versione, ma ha ancora bisogno -odell'opzione. Se qualcuno può verificare o darmi un comando di esempio per ripristinare un singolo database altrove con tutto ciò di cui ha bisogno, lo apprezzerei.

Modifica: viene chiesto dal sito di mostrare l'unicità di questa domanda modificando la mia domanda. Questa domanda solleva il problema e ottiene la chiarezza sugli OID nei backup, la differenza tra globali e non globali, così come i test ripristinano le raccomandazioni per garantire che il backup sia buono anziché solo il backup. Grazie alle risposte sono stato in grado di eseguire il backup, capire globals / oids e iniziare ogni notte un processo di ripristino del test su Postgres usando cron job. Grazie per l'aiuto!


Risposte:


58

È possibile scaricare l'intero cluster PostgreSQL con pg_dumpall. Sono tutti i database e tutti i globi per un singolo cluster. Dalla riga di comando sul server, farei una cosa del genere. (Il mio è in ascolto sulla porta 5433, non sulla porta predefinita.) Potresti aver bisogno o meno dell'opzione --clean.

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

Ciò include i globali: informazioni su utenti e gruppi, tablespace e così via.

Se avessi intenzione di eseguire il backup di un singolo database e spostarlo su un server scratch , avrei scaricato il database con pg_dump e scaricato i globali con

  • pg_dumpall --globals-only, o
  • pg_dumpall --roles-only (se hai solo bisogno di ruoli)

come questo.

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

Gli output sono solo file di testo.

Dopo aver spostato questi file su un altro server, caricare prima i globi, quindi il dump del database.

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

Pensavo che pg_dumpall avrebbe almeno effettuato il backup delle chiavi esterne, ma anche questa sembra essere un'opzione. Secondo: http://www.postgresql.org/docs/9.1/static/app-pg-dumpall.html anche con pg_dumpall ho bisogno di usare un'opzione -o per il backup di chiavi esterne

No, quel riferimento dice "Utilizzare questa opzione se l' applicazione fa riferimento in qualche modo alle colonne OID (ad esempio, in un vincolo di chiave esterna). Altrimenti, questa opzione non dovrebbe essere utilizzata." (Enfasi aggiunta.) Penso che sia improbabile che l' applicazione faccia riferimento alle colonne OID. Non è necessario utilizzare questa opzione per "eseguire il backup delle chiavi esterne". (Leggi il file di dump nel tuo editor o nel visualizzatore di file.)


3
Il nome del database non manca nella riga in cui viene importato sandbox.sql? psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
SebK

Vede che pg_dumpall, versione 9.5, non funziona correttamente con i NULLvalori durante l'utilizzo COPY. Ricevo molti errori come questo: psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.quando torno a Postgres 10 usandopsql -f /tmp/dumpall.sql
piotrekkr il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.