it-swarm.it

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

Ho un database da 3 GB che viene costantemente modificato e ho bisogno di fare i 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.

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

38
Roman

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.

56
Frank Heikens

pg_dump avvia una transazione, analogamente a come funzionerà qualsiasi altra query di lunga durata. Le garanzie di coerenza derivano da implementazione 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 tentano di modificare la struttura del database vengano bloccati mentre il dump è in esecuzione. Ciò non influisce sulla qualità della discarica.

12
Greg Smith

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

Si prega di leggere il manuale su Transaction Isolation e ad esempio Discussione Elenco utenti su questo .

Citazione:

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

Fondamentalmente tutto dopo pg_dump imposta il livello di isolamento della transazione è not parte di questo dump.

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

12
Dennis Nolte