sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL 9.0 Säkerhetskopiering och återställning

I PostgreSQL är Backup &Recovery mycket användarvänliga jämfört med andra databaser. Många av dem kommer inte att gå med på detta, ok låt oss inte gå in i debatten. När det kommer till säkerhetskopior stöder inte PostgreSQL INCREMENTAL BACKUP, men det finns mycket konsekventa säkerhetskopieringsverktyg och en lösning på OS-nivå för att uppnå detta mål.

Min bildpresentation om PostgreSQL Backup and Recovery ger en komplett konceptuell idé. Genom att titta på Diagram kan du ta reda på vilka säkerhetskopior som kan användas för att återställa eller återställa.

Logisk säkerhetskopiering

pg_dump, pg_restore och pg_dumpall verktyg som används för logiska säkerhetskopieringar. pg_dump och pg_restore hjälper till att ta säkerhetskopior för databasnivå, schemanivå och tabellnivå. Pg_dumpall används för klusternivådump.

Tre format stöds med pg_dump, Plain SQL-format, Custom Format och Tar Format. Custom- och Tar Format-dumpar är kompatibla med verktyget pg_restore medan dumpar i vanliga SQL-format är kompatibla med verktyget psql för återställning.

Nedan är exemplen för varje säkerhetskopieringsnivå och med relaterade återställningskommandon.

Obs:Ställ in standardinställningarna för PGDATABASE, PGUSER, PGPASSWORD och PGPORT i .bash_profile(Environment Variables in Windows)

Dump och återställ vanligt SQL-format

$ 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

Anpassat format

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

Tjärformat

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

Obs:Schemanivå- och tabellnivådumpningar kan utföras på samma sätt genom att lägga till relaterade alternativ.

Klusternivådump:

$pg_dumpall -p portnumber > filename

For restoring use psql command

$ psql -f filename

Det finns det bästa sättet att ta dumpningar och återställa metoder. I synnerhet Simon Riggs och Hannu Krosing – boken "PostgreSQL 9 Administration Cookbook – 2010" är ett bra sätt att börja med PostgreSQL Backup and Recovery publicerad av www.2ndQuadrant.com.

Fysisk säkerhetskopiering (säkerhetskopiering av filsystem)

Kall säkerhetskopiering:

I kall säkerhetskopiering är det en enkel filsystemsbackup av /datakatalogen när Postgres Instance är nere, menar, för att uppnå en självkonsekvent säkerhetskopiering av datakatalogen, bör databasservern stängas av innan kopiering. PostgreSQL ger flexibilitet att hålla pg_xlog och pg_tblspce i olika monteringspunkter via softlink. När du kopierar /data-katalogen inklusive mjuklänkens data, använd kommandot nedan.

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

Hot Backup (Online Backup):

I Hot Backup kommer klustret att vara igång och databasen bör vara i arkivloggläge. Två systemfunktioner kommer att meddela instansen om att starta och stoppa Hot Backup-processen(pg_start_backup(),pg_stop_backup()). Innan vi går vidare med Online Backup, låt oss diskutera läget Databas Archive Log som är obligatoriskt för Online Backup.

Aktivera WAL-arkivering:

Mina kommande inlägg kommer att informera om PITR / Tunning WAL etc., för närvarande tittar vi på WAL Archiving. I PostgreSQL-databassystemet "skriver" den faktiska databasen till en tilläggsfil som heter WAL (write-ahead log) till disken. Den innehåller en förteckning över skrivningar som gjorts i databassystemet. I fallet med Crash kan databasen repareras/återställas från dessa poster.

Normalt loggar förskrivningsloggen med jämna mellanrum (kallade Checkpoints) som matchas mot databasen och raderas sedan eftersom det inte längre behövs. Du kan också använda WAL som en säkerhetskopia eftersom det finns en registrering av alla skrivningar som gjorts till databasen.

Koncept för WAL-arkivering:

Write-ahead-loggen består av varje 16 MB stor, som kallas segment. WALs finns under pg_xlog-katalogen och det är underkatalogen till "datakatalogen". Filnamnen kommer att ha numeriskt namn i stigande ordning av PostgreSQL Instance. För att göra en säkerhetskopiering på basis av WAL behöver man en grundläggande säkerhetskopia, det vill säga en komplett säkerhetskopia av datakatalogen och WAL-segmenten mellan basbackupen och det aktuella datumet.

Konfigurering av arkivering av WAL-segment kan väljas genom att ställa in de två konfigurationsparametrarnas archive_command och archive_mode i postgresql.conf. För att göra klustret till arkivloggläge krävs OMSTART.

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

Obs! % p för att filen ska kopieras med sökväg som används som filnamn och % f utan en katalogpost för målfilen.

För ytterligare information om arkiveringsprocessen, se inlägget PostgreSQL 9.0 Memory &Processess.

Online säkerhetskopiering :

Så här tar du säkerhetskopiering 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();

Obs! Det är inte nödvändigt att dessa två funktioner körs i samma databasanslutning. Säkerhetskopieringsläget är globalt och beständigt.

I PostgreSQL finns det ingen katalog för att lagra start- och stopptiden för onlinesäkerhetskopieringen. Men när onlinesäkerhetskopiering pågår skapas och raderas några av filerna.

pg_start_backup('label') och pg_stop_backup är de två systemfunktionerna för att utföra onlinesäkerhetskopieringen. Med pg_start_backup('label') skapas en fil backup_label under $PGDATA-katalogen och med pg_stop_backup() en fil 'wal-segement-number.backup'-fil skapad under $PGDATA/pg_xlog. Backup_label kommer att ge starttiden och Checkpoint-platsen för WAL-segmentet, den kommer också att meddela PostgreSQL-instansen att Cluster är i BACKUP-LÄGE. 'wal-segment-number.backup'-filen under $PGDATA/pg_xlog-katalogen beskriver start- och stopptiden, kontrollpunktsplats med WAL-segmentnummer.

Obs:Efter pg_stop_backup(), tas backup_label-filen bort av PostgreSQL-instansen.

Skriv dina kommentarer, förslag.


  1. Skapa en kall standby för PostgreSQL med Amazon AWS

  2. Skapa en vy med ORDER BY-satsen

  3. MySQL lägger till dagar till ett datum

  4. PostgreSQL-funktion för senast infogade ID