L'esecuzione di pg_dump su db live produce backup coerenti?


37

Ho un database da 3 GB che viene costantemente modificato e ho bisogno di fare backup senza arrestare il server (Postgres 8.3).

Il mio pg_dump funziona per 5 minuti. Cosa succede se i dati vengono modificati durante il processo? Ottengo backup coerenti? Non voglio scoprire quando si verifica un disastro.

La documentazione di Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html non dice nulla al riguardo.


4
Ciao Roddick. Consiglio vivamente di testare il processo di ripristino prima degli attacchi di emergenza. Configurare un altro computer e ripristinare utilizzando uno dei backup per provarlo.
Derek Downey,

Risposte:


53

Dal manuale :

Effettua backup coerenti anche se il database viene utilizzato contemporaneamente.

Quindi sì, puoi fidarti del backup. Naturalmente, è PostgreSQL, puoi fidarti dei tuoi dati in PostgreSQL.


10
Ho letteralmente LOL quando ho letto "puoi fidarti dei tuoi dati in PostgreSQL" :)
François Beausoleil,

Un collegamento al manuale sarebbe carino
Pablo Fernandez,

1
@PabloFernandez: Fatto!
Frank Heikens,

1
Tuttavia, un backup logico su un database live bloccherà le tue tabelle, non perdere queste informazioni. Forse troverai alcuni suggerimenti: compose.com/articles/…
tryp,

Quindi, per favore, cosa c'è di così divertente? Dovrei smettere di usare postgresql?
777 non

12

pg_dump avvia una transazione, in modo simile a come funzionerà qualsiasi altra query di lunga durata. Le garanzie di coerenza derivano dall'implementazione di MVCC . La discarica sarà sempre autoconsistente nell'ambito di tali regole.

Tutte le parti sfocate di MVCC sono intorno a cose come l'ordine delle transazioni UPDATE che diventano visibili agli altri clienti e come vengono acquisiti i blocchi. pg_dump è severo riguardo all'ordinamento e acquisisce un blocco di lettura su tutto il database per scaricarlo. Per la maggior parte delle persone, è quello che si aspettano e il meccanismo utilizzato non causa mai problemi. Il rischio di concorrenza principale è che i client che provano a modificare la struttura del database vengano bloccati mentre il dump è in esecuzione. Ciò non influisce sulla qualità della discarica.


11

Il dump inizia con l'impostazione TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Leggere il manuale sull'isolamento delle transazioni e, ad esempio, la discussione sull'Elenco utenti al riguardo .

Citazione:

Il backup vedrà solo le transazioni eseguite prima dell'impostazione del livello di isolamento.

Fondamentalmente tutto ciò che segue pg_dumpimposta il livello di isolamento della transazione non fa parte di questo dump.

Le operazioni di lettura / scrittura non sono interessate (bloccate) durante quel periodo.


-1

Prima scusa per aver risposto a questo vecchio thread. Ma dalla mia esperienza non posso confermare l'affermazione che ci si può fidare di pg_dump /

Sono passato un mese fa per un progetto a Postgres. E ovviamente ho fatto tutti i backup con pg_dump dal sistema live come suggerito. Ma dopo il primo controllo del backup ho capito che tutte le discariche hanno dimensioni diverse. Dopo aver ripristinato casualmente alcuni di essi, ho capito che mancavano alcuni tavoli. Quindi ho iniziato ad analizzare perché questo accade e ho capito che se l'applicazione di sovrapposizione, ad esempio i server delle app, il blocco di alcune tabelle e pg_dump non è in attesa di essere rilasciati. Mi è stato necessario ogni volta per arrestare il server per il periodo di backup che non è una buona soluzione.

Quindi sto ancora cercando una soluzione, ma come ho detto, non sono completamente d'accordo con l'affermazione che ci si può fidare di pg_dump.


Se ciò accade, sarebbe un problema serio in pg_dump. Quale versione stai usando? La mia domanda era di 3 anni fa, e ora sono su 9.3 e Amazon Reds che eseguono backup attivi apparentemente usando pg_dump. Non possono sbagliarsi.
Romano,

Puoi fidarti di pg_dump per fare un backup serializzato (vedi la mia risposta per collegamenti / documenti e alcuni dettagli) Tuttavia durante le mie letture ho letto che non dovresti cambiare la struttura del DB stesso, anche se non sono riuscito a scavare più a fondo su quello . Dato che inseriamo / aggiorniamo / eliminiamo solo non posso commentare le creazioni di tabelle. Per noi ho appena fatto in modo di non creare tabelle durante il tempo pg_dump.
Dennis Nolte,

2
Le tue dichiarazioni indicano un errore grave (hai presentato una segnalazione di errore?), Un errore grave nel modo in cui hai scaricato il tuo database o qualche malinteso. In mancanza di fatti non si può decidere tra questi.
dezso
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.