PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Backup e ripristino di PostgreSQL 9.0

In PostgreSQL, Backup &Recovery sono molto facili da usare rispetto ad altri database. Molti di loro non saranno d'accordo, ok non entriamo nel dibattito. Venendo ai backup, PostgreSQL non supporta il BACKUP INCREMENTALE, tuttavia ci sono strumenti di backup molto coerenti e soluzioni alternative a livello di sistema operativo per raggiungere questo obiettivo.

La mia presentazione pittorica su PostgreSQL Backup and Recovery fornisce un'idea concettuale completa. Esaminando Diagram puoi capire quali backup possono essere utilizzati per ripristinare o ripristinare.

Backup logico

Utilità pg_dump, pg_restore e pg_dumpall utilizzate per i backup logici. pg_dump e pg_restore aiuteranno a eseguire backup a livello di database, livello di schema e livello di tabella. Pg_dumpall utilizzato per il dump a livello di cluster.

Sono supportati tre formati con pg_dump, Plain SQL format, Custom Format e Tar Format. I dump in formato personalizzato e Tar sono compatibili con l'utilità pg_restore mentre i dump in formato SQL semplice sono compatibili con l'utilità psql per il ripristino.

Di seguito sono riportati gli esempi per ciascun livello di Backup e con i relativi comandi di ripristino.

Nota:imposta le impostazioni predefinite per PGDATABASE, PGUSER, PGPASSWORD e PGPORT in .bash_profile(Variabili d'ambiente in Windows)

Dump e ripristino in formato SQL semplice

$ pg_dump -U username -Fp dbname  >  filename
or
$ pg_dump -U username dbname -f filename
or
$ pg_dump -Fp -U username dbname -f filename

For restoring use psql command

$ psql -U username -f filename dbname
or
postgres=# i SQL-file-name //in psql terminal with i option

Formato personalizzato

$ pg_dump -Fc dbname -f filename
$ pg_restore -Fc -U username -d dbname filename.dmp

Formato Tar

$ pg_dump -Ft dbname -f filename
$ pg_restore -U username -d dbname filename
or
$ cat tar-file.tar | psql -U username dbname

Nota:i dump a livello di schema e a livello di tabelle possono essere eseguiti allo stesso modo aggiungendo opzioni correlate.

Discarica a livello di cluster:

$pg_dumpall -p portnumber > filename

For restoring use psql command

$ psql -f filename

Ci sono modi molto migliori per prendere discariche e ripristinare le metodologie. In particolare, il libro di Simon Riggs e Hannu Krosing – “PostgreSQL 9 Administration Cookbook – 2010” è un buon modo per iniziare con PostgreSQL Backup and Recovery pubblicato da www.2ndQuadrant.com.

Backup fisico (Backup del file system)

Backup a freddo:

Nel backup a freddo, è un semplice backup del file system della directory /data quando l'istanza Postgres è inattiva, significa che per ottenere un backup della directory dei dati autoconsistente, il server del database deve essere spento prima della copia. PostgreSQL offre flessibilità per mantenere pg_xlog e pg_tblspce in diversi punti di montaggio tramite softlink. Durante la copia della directory /data inclusi i dati del collegamento software, utilizzare il comando seguente.

tar czf backup.tar.gz $PGDATA
or
cp -r $PGDATA /backup/
or
rsync -a $PGDATA /wherever/data

Backup a caldo (backup online):

In Hot Backup, il cluster sarà attivo e funzionante e il database dovrebbe essere in modalità registro archivio. Due funzioni di sistema notificheranno all'istanza l'avvio e l'arresto del processo Hot Backup(pg_start_backup(),pg_stop_backup()). Prima di procedere con il backup online, discutiamo della modalità Registro archivio database, obbligatoria per i backup online.

Abilitazione dell'archiviazione WAL:

I miei prossimi post forniranno informazioni su PITR / Tunning WAL ecc., attualmente esamineremo l'archiviazione WAL. Nel sistema di database PostgreSQL, il database effettivo "scrive" su un file aggiuntivo chiamato write-ahead log (WAL) su disco. Contiene un record di scritture effettuate nel sistema di database. In caso di crash, il database può essere riparato/ripristinato da questi record.

Normalmente, il registro write-ahead registra a intervalli regolari (denominati checkpoint) confrontato con il database e quindi eliminato perché non è più necessario. Puoi anche utilizzare il WAL come backup perché c'è un record di tutte le scritture effettuate nel database.

Concetto di archiviazione WAL:

Il registro write-ahead è composto da ogni 16 MB di grandi dimensioni, chiamati segmenti. I WAL risiedono nella directory pg_xlog ed è la sottodirectory di "data directory". I nomi dei file avranno un nome numerico in ordine crescente dall'istanza PostgreSQL. Per eseguire un backup sulla base di WAL, è necessario un backup di base, ovvero un backup completo della directory dei dati e dei segmenti WAL tra il backup di base e la data corrente.

La configurazione dell'archiviazione dei segmenti WAL può essere scelta impostando i due parametri di configurazione archive_command e archive_mode in postgresql.conf. Per rendere il cluster in modalità archivio-log richiede RESTART.

archive_mode= on/off (boolean parameter)
archive_command = 'cp –i %p / Archive/Location/ f% '

Nota: % p per il file da copiare con percorso utilizzato come nome file e % f senza una voce di directory per il file di destinazione.

Per ulteriori informazioni sul processo Archiver, fare riferimento al post PostgreSQL 9.0 Memory &Processess.

Backup online:

Per eseguire il backup online:

Step 1 : Issue pg_start_backup('lable') in the psql terminal
postgres=# select pg_start_backup('fb');
Step 2 : OS level copy the $PGDATA directory to any Backup Location
$ cp -r $PGDATA /anylocation
Step 3 : Issue pg_stop_backup() in psql terminal.
postgres=# select pg_stop_backup();

Nota: Non è necessario che queste due funzioni vengano eseguite nella stessa connessione al database. La modalità di backup è globale e persistente.

In PostgreSQL non esiste un catalogo per memorizzare l'ora di inizio e fine del backup online. Tuttavia, quando è in corso il backup online, un paio di file vengono creati ed eliminati.

pg_start_backup('label') e pg_stop_backup sono le due funzioni di sistema per eseguire il backup online. Con pg_start_backup('label') viene creato un file backup_label nella directory $PGDATA e con pg_stop_backup() un file 'wal-segment-number.backup' creato in $PGDATA/pg_xlog. Backup_label fornirà l'ora di inizio e la posizione del checkpoint del segmento WAL, inoltre notificherà all'istanza PostgreSQL che il cluster è in BACKUP-MODE. Il file 'wal-segment-number.backup' nella directory $PGDATA/pg_xlog descrive l'ora di inizio e di fine, la posizione del checkpoint con il numero di segmento WAL.

Nota:dopo pg_stop_backup(), il file backup_label viene eliminato dall'istanza PostgreSQL.

Pubblica i tuoi commenti, suggerimenti.