Come eseguire il backup incrementale ogni ora in Postgres?


18

Prova di fare un backup incrementale orario di un singolo server Postgres (Win7 64).

Ho la seguente configurazione in postgresql.conf:

max_wal_senders = 2
wal_level       = archive
archive_mode    = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'

(ricomincia)

Ho fatto un backup di base con pg_basebackup -U postgres -D ..\foo -F t -x

Il che ha creato un base.tarfile di grandi dimensioni nella foocartella e aggiunto alcuni file di 16.384 KB, che presumo siano WAL.

Quello che non capisco è perché i WAL foonon cambiano . I WAL in data/pg_xlogcambiamento. Pg non dovrebbe copiarli? Come decide di farlo?

Forse devo impostare archive_timeout=3600?

Ho visto diversi siti (le mailing list di pg, la pagina postgres di bacula) che dicono che devi chiamare pg_start_backup () e pg_stop_backup (), ma credo che non siano necessari. È vero?

Domande secondarie:

  1. Con quale frequenza data/pg_xlogvengono scritti i WAL ? Cosa fa scattare una scrittura?

    Sembra aggiornare un WAL se faccio un po 'di DML, quindi \qin psql. Oppure modifica una tabella in pgAdmin, quindi chiudi la finestra. Ho pensato che avrebbe scritto su commit.

  2. Migliori pratiche? pg_basebackup una volta alla settimana? Archiviare i WAL sullo stesso computer di PG o su un computer remoto?

Risposte:


5

Si desidera eseguire un backup incrementale della cartella di archivio nella memoria remota.

Se è necessario ripristinare dal backup, lo scenario di base è che sarebbe necessario il backup di base come punto di partenza e l'intero contenuto della cartella di archivio per riprodurre l'attività transazionale avvenuta tra il punto di partenza e l'arresto anomalo.

Inoltre, per evitare che i file nella cartella di archivio si accumulino per sempre, è necessario eseguire periodicamente un nuovo backup di base ed eliminare i file archiviati prima del nuovo backup di base.


Grazie. Alcune domande: 1. Devo fare pg_start_backup (), copiare i dati, quindi eseguire pg_stop_backup () o pg_start_backup (); pg_stop_backup (), quindi copia?
Neil McGuigan,

@Neil: 1. e 2. non applicare quando si utilizza pg_basebackup, si occupa già di questo. 3. postgres eliminerà automaticamente i file WAL pg_logquando non sono più necessari. Non dovresti fare nulla manualmente pg_log. Altrimenti vedi il wal_keep_segmentsparametro
Daniel Vérité l'

per cartella "archivio" intendi pg_xlog, sì?
Neil McGuigan,

@NeilMcGuigan: niente affatto. La cartella di archivio è la cartella di destinazione del comando di archiviazione, ad esempio qui "c: \ postgres \ foo". pg_xlogè interamente gestito automaticamente da Postgres, mentre la cartella di archivio è interamente gestita dal DBA.
Daniel Vérité,

Immagino di essere confuso perché i WAL in foo non cambiano mai dopo il pg_basebackup iniziale
Neil McGuigan,

8

Esiste uno strumento esistente che ti aiuterà moltissimo, WAL-E . Fornisce un archive_commande restore_commandper PITR a S3.

Ci sono presenti comandi per fare incrementali o differenziali backup logici. pg_dumpnon può assumere un valore incrementale o differenziale. L'unico modo per farlo è tramite l'archiviazione dei registri.

In teoria potresti prendere un nuovo backup completo, fare un diff binario tra esso e l'ultimo backup e caricare il diff. Questo però mi sembra un modo fragile e inefficiente di fare le cose, e davvero non lo consiglierei.

Inoltre, PgBarman supporta l'integrazione con S3 tramite script hook e automatizzerà gran parte della rotazione e della gestione del backup. Ancora una volta, questa potrebbe non essere un'opzione su Windows.

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.