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

PostgreSQL 9.0 Backup &Recovery

I PostgreSQL er Backup &Recovery meget brugervenlige sammenlignet med andre databaser. Mange af dem vil ikke gå med til dette, ok lad os ikke komme ind i debat. Når det kommer til sikkerhedskopier, understøtter PostgreSQL ikke INCREMENTAL BACKUP, men der er meget konsekvente sikkerhedskopieringsværktøjer og omgåelse på OS-niveau for at nå dette mål.

Min billedpræsentation om PostgreSQL Backup and Recovery giver en komplet konceptuel idé. Når du ser på Diagram, kan du finde ud af, hvilke sikkerhedskopier der kan bruges til at gendanne eller gendanne.

Logisk sikkerhedskopiering

pg_dump, pg_restore og pg_dumpall hjælpeprogrammer, der bruges til logiske sikkerhedskopier. pg_dump og pg_restore hjælper med at tage sikkerhedskopier til databaseniveau, skemaniveau og tabelniveau. Pg_dumpall bruges til klyngeniveaudump.

Tre formater understøttes med pg_dump, almindeligt SQL-format, brugerdefineret format og tar-format. Custom- og Tar Format-dumps er kompatible med pg_restore-værktøjet, mens almindelige SQL-formatdumps er kompatible med psql-værktøjet til gendannelse.

Nedenfor er eksemplerne for hvert sikkerhedskopieringsniveau og med relaterede gendannelseskommandoer.

Bemærk:Indstil standardindstillingerne for PGDATABASE, PGUSER, PGPASSWORD og PGPORT i .bash_profile(Environment Variables in Windows)

Dump og gendan almindeligt 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

Tilpasset format

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

Tæreformat

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

Bemærk:Skemaniveau- og tabellerniveaudumps kan udføres på samme måde ved at tilføje relaterede muligheder.

Klyngeniveaudump:

$pg_dumpall -p portnumber > filename

For restoring use psql command

$ psql -f filename

Der er de bedste måder at dumpe og gendanne metoder. Især Simon Riggs og Hannu Krosing – “PostgreSQL 9 Administration Cookbook – 2010” bog er en god måde at starte med PostgreSQL Backup and Recovery udgivet af www.2ndQuadrant.com.

Fysisk sikkerhedskopiering (Sikkerhedskopiering af filsystem)

Kold sikkerhedskopiering:

I kold backup er det en simpel filsystem backup af /data directory, når Postgres Instance er nede, betyder, at for at opnå en selvkonsistent data directory backup, bør databaseserveren lukkes ned før kopiering. PostgreSQL giver fleksibilitet til at holde pg_xlog og pg_tblspce i forskellige monteringspunkter via softlink. Mens du kopierer /data-biblioteket inklusive det bløde links data, skal du bruge kommandoen nedenfor.

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

Hot Backup (Online Backup):

I Hot Backup vil klyngen være oppe og køre, og databasen skal være i arkivlogtilstand. To systemfunktioner giver instansen besked om at starte og stoppe Hot Backup-processen(pg_start_backup(),pg_stop_backup()). Inden vi går videre med online sikkerhedskopiering, lad os diskutere databasearkivtilstanden, som er obligatorisk for online sikkerhedskopiering.

Aktivering af WAL-arkivering:

Mine kommende indlæg vil orientere om PITR / Tunning WAL osv., i øjeblikket ser vi på WAL-arkivering. I PostgreSQL-databasesystemet 'skriver' den faktiske database til en tilføjelsesfil kaldet WAL (Write-ahead log) til disken. Den indeholder en registrering af skrivninger, der er foretaget i databasesystemet. I tilfælde af Crash kan databasen repareres/gendannes fra disse poster.

Normalt logger fremskrivningsloggen med regelmæssige intervaller (kaldet tjekpunkter), der matcher databasen og slettes derefter, fordi den ikke længere er påkrævet. Du kan også bruge WAL som en sikkerhedskopi, fordi der er en registrering af alle skrivninger til databasen.

Koncept for WAL-arkivering:

Write-ahead-loggen er sammensat af hver 16 MB stor, som kaldes segmenter. WAL'erne ligger under pg_xlog-mappen, og det er undermappen til 'datamappe'. Filnavnene vil have numerisk navn i stigende rækkefølge af PostgreSQL Instance. For at udføre en backup på basis af WAL, har man brug for en grundlæggende backup, det vil sige en komplet backup af databiblioteket og WAL segmenterne mellem basis backup og den aktuelle dato.

Konfiguration af arkivering af WAL-segmenter kan vælges ved at indstille de to konfigurationsparametres archive_command og archive_mode i postgresql.conf. At gøre klyngen til Arkiv-log-tilstand kræver GENSTART.

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

Bemærk: % p for at filen skal kopieres med stien brugt som filnavn og % f uden en mappeindgang for destinationsfilen.

For yderligere information om arkiveringsprocessen henvises til postgreSQL 9.0 Memory &Processess.

Online backup :

Sådan tager du online backup:

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();

Bemærk: Det er ikke nødvendigt, at disse to funktioner skal køre i samme databaseforbindelse. Sikkerhedskopieringstilstanden er global og vedvarende.

I PostgreSQL er der intet katalog til at gemme start- og stoptidspunkt for online backup. Men når online backup er i gang, oprettes og slettes et par af filerne.

pg_start_backup('label') og pg_stop_backup er de to systemfunktioner til at udføre online backup. Med pg_start_backup('label') oprettes en fil backup_label under $PGDATA bibliotek og med pg_stop_backup() en fil 'wal-segement-number.backup' fil oprettet under $PGDATA/pg_xlog. Backup_label vil give starttidspunktet og Checkpoint-placeringen af ​​WAL-segmentet, det vil også give PostgreSQL-forekomsten besked om, at Cluster er i BACKUP-MODE. 'wal-segment-number.backup'-filen under mappen $PGDATA/pg_xlog beskriver start- og stoptidspunkt, Checkpoint-placering med WAL-segmentnummer.

Bemærk:Efter pg_stop_backup(), slettes backup_label-filen af ​​PostgreSQL-instansen.

Skriv dine kommentarer, forslag.


  1. Hvordan aktiverer jeg mysqlnd for php?

  2. Sådan konfigureres AppArmor til PostgreSQL og TimescaleDB

  3. Hvordan opdaterer man alle kolonner med INSERT ... ON CONFLICT ...?

  4. Er det muligt at tvinge rækkeniveaulåsning i SQL Server?