2009-02-05 20 views
9

A) Qual è la soluzione migliore per eseguire regolarmente il backup di un database PostgreSQL di grandi dimensioni (versione 8.3 in esecuzione sull'ultimo server Ubuntu); Si prega di non dire pg_dump con quelle istruzioni di inserimento penosamente lentiSoluzione di ripristino e backup PostgreSQL

b) Qual è la soluzione migliore per la replica del database PostgreSQL che funziona nel mondo reale

+0

pg_dump non usa istruzioni di inserimento per impostazione predefinita. Utilizzerà il comando COPY per impostazione predefinita. L'opzione della riga di comando di -d o --inserts farà sì che pg_dump inserisca istruzioni di inserimento nell'esportazione. Vuoi dire che la COPIA è troppo lenta? O stai usando l'opzione di comando -d o --inserts? –

+0

non sapevo che avrei potuto disattivare le istruzioni di inserimento, COPY è OK..my male – tropikalista

risposta

4

A. pg_dump non utilizza istruzioni di inserimento per impostazione predefinita. Utilizzerà il comando COPY per impostazione predefinita. L'opzione della riga di comando di -d o --inserts farà sì che pg_dump inserisca istruzioni di inserimento nell'esportazione. Se si dispone di uno di questi interruttori nel comando pg_dump, è sufficiente rimuoverli per fare in modo che pg_dump utilizzi COPY.

B. Nella prossima versione di Postgres, avranno simple replication fuori dalla scatola. Penso che la versione 8.4 sia pianificata presto. Quindi, potrebbe valere la pena di farlo, se possibile.

2

Si potrebbe utilizzare Online WAL-Backup forse in combinazione di notte/giornaliero/settimanale/mensile pg_dumps. Una volta alla settimana/mese dovresti copiare l'intero cluster.

Il ripristino funziona abbastanza bene e quasi non si perdono i dati quando si copia anticipatamente (rsync è il migliore poiché è molto efficace).

La velocità è buona, perché deve solo applicare i WAL che sono successivi al backup/copia del cluster completo.

6

Penso che ci sia solo una risposta a quello.

PITR o ripristino del punto nel tempo. È fondamentalmente l'archiviazione dei registri delle transazioni e, per quanto ne so, il modo migliore per fare i backup.

L'ho impostato un paio di volte per 8.1, ma dovrebbe essere lo stesso in 8.3.

Nella postgresql.conf tutto quello che dovete fare è aggiungere questo:

archive_command = 'test ! -f /path/to/your/backups/archive_logs/%f && cp -i %p /path/to/your/backups/archive_logs/%f </dev/null' 

Questo comando copia i registri di archivio nella directory specificata, dove si può tranquillamente eseguire il backup con il software di backup del vostro scelta.

Per eseguire un backup completo, è necessario prima dire a PostgreSQL che si sta eseguendo un backup. Viene eseguito tramite il comando psql psql "SELECT pg_start_backup('my_backup');" Successivamente, copia la directory dei dati con rsync, cpio o qualche altro strumento. Se il database è molto utilizzato, i file cambieranno durante la copia, quindi è importante che lo strumento sia in grado di gestirlo correttamente e non di eseguire il salvataggio.

Al termine della copia, è sufficiente eseguire psql "SELECT pg_stop_backup();" per dire a PostgreSQL di interromperlo. Ciò che questi comandi fanno è mettere un marcatore nei log di archivio in cui è stato avviato il backup, quindi in un ripristino, sa da dove deve iniziare a leggere da lì.

Questa tecnica può anche essere utilizzata per disporre di un warm standby per la replica, ma non sarà leggibile, solo pronta a subentrare in caso di emergenza. La modalità Hot Standby completa è prevista nella versione 8.4, quindi fino ad allora non credo ci sia un'altra opzione.

Una cosa che è grande se si utilizza PITR, è che è possibile specificare un timestamp a quando si desidera aggiungere i registri di archivio.Quindi può anche salvare il database da incidenti (come la rimozione o la modifica di alcuni dati)