Su un PostgreSQL v9.0 ho un sistema di archiviazione WAL funzionante. Quindi WAL archivia un normale archivio (quando vengono creati 3 WAL o se un WAL è più vecchio di 15 minuti).
Ora aggiungo un pacchetto binario della directory PG_DATA (escluso il sottodirectoy pg_xlog). Per fare ciò eseguo una pg_start_backup(),
copia binaria e a pg_stop_backup()
.
Penso di capire abbastanza bene cosa stanno facendo pg_start_backup e pg_stop_backup, il primo crea un checkpoint e l'ultimo assicura l'archiviazione dell'ultimo file WAL.
Dalla documentazione ufficiale possiamo vedere che per la copia dei dati binari dovremmo:
Eseguire il backup, utilizzando qualsiasi comodo strumento di backup del file system come tar o cpio (non pg_dump o pg_dumpall). Non è necessario né auspicabile interrompere il normale funzionamento del database mentre si esegue questa operazione.
Quindi sono abbastanza perplesso. Ciò significa che è possibile eseguire un Checkpoint mentre eseguiamo la copia. Ho visto molta documentazione che afferma che il comando di copia dovrebbe consentire la modifica dei dati durante l'esecuzione della copia, sono d'accordo con questo, semplicemente per trovare lo strumento giusto. Ma la mia domanda è come PostgreSQL gestirà il recupero con un contenuto pg_data contenente alcuni file che sono incoerenti (alcuni da prima del checkpoint, altri da dopo)?
Riproducendo i registri delle transazioni Postgresql sarà in grado di mettere tutti questi file nello stato giusto? Ho visto che creare tabelle e rilasciare operazioni sono pericolose mentre il backup sta eseguendo, non ci sono alcune operazioni pericolose come i comandi di vuoto ? Pg_backup sospende le operazioni del vuoto? Devo fare una copia del file globale / pg_control alla fine all'inizio del processo di copia binaria? Dovrei usare un filesystem abilitato per le istantanee (come con un xfs-freeze) per ottenere un processo di ripristino più veloce?
Ho visto che un arresto anomalo dello script di backup non avvierà automaticamente un pg_stop_backup, quindi c'è una possibilità che il mio stato di backup viva per lungo tempo (fino a quando i miei nagios suonano qualcuno da qualche parte per riparare il pg_stop_backup ()). Quindi se qualcosa di diverso in PostgreSQL tra questi due comandi mi piacerebbe conoscerlo, per capire quale impatto potrebbe avere.
Illuminami per favore.