sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL 9.0 Back-up en herstel

In PostgreSQL zijn Backup &Recovery zeer gebruiksvriendelijk in vergelijking met andere databases. Velen van hen zullen het hier niet mee eens zijn, ok laten we niet in discussie gaan. Wat betreft back-ups, PostgreSQL ondersteunt geen INCREMENTELE BACK-UP, maar er zijn zeer consistente back-uptools en work-arounds op OS-niveau om dit doel te bereiken.

Mijn picturale presentatie over PostgreSQL Backup and Recovery geeft een compleet conceptueel idee. Als u in Diagram kijkt, kunt u zien welke back-ups kunnen worden gebruikt om te herstellen of te herstellen.

Logische back-up

pg_dump, pg_restore en pg_dumpall hulpprogramma's die worden gebruikt voor logische back-ups. pg_dump en pg_restore helpen bij het maken van back-ups op databaseniveau, schemaniveau en tabelniveau. Pg_dumpall gebruikt voor dump op clusterniveau.

Er worden drie formaten ondersteund:pg_dump, gewoon SQL-formaat, aangepast formaat en Tar-formaat. Dumps in aangepaste en Tar-indeling zijn compatibel met het hulpprogramma pg_restore, terwijl dumps in gewone SQL-indeling compatibel zijn met het hulpprogramma psql voor herstel.

Hieronder staan ​​de voorbeelden voor elk back-upniveau en met bijbehorende herstelopdrachten.

Opmerking:stel de standaardwaarden in voor PGDATABASE, PGUSER, PGPASSWORD en PGPORT in .bash_profile (omgevingsvariabelen in Windows)

Dumpen en herstellen in gewone SQL-indeling

$ 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

Aangepast formaat

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

Ter-indeling

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

Opmerking:Schemaniveau en tabellen Niveaudumps kunnen op dezelfde manier worden uitgevoerd door gerelateerde opties toe te voegen.

Dump op clusterniveau:

$pg_dumpall -p portnumber > filename

For restoring use psql command

$ psql -f filename

Er zijn de beste manieren om stortplaatsen te verwijderen en methodieken te herstellen. Vooral Simon Riggs en Hannu Krosing – “PostgreSQL 9 Administration Cookbook – 2010” boek is een goede manier om te beginnen met PostgreSQL Backup and Recovery, gepubliceerd door www.2ndQuadrant.com.

Fysieke back-up (back-up van bestandssysteem)

Koude back-up:

Bij koude back-up is het een eenvoudige back-up van het bestandssysteem van de /data-directory wanneer Postgres Instance niet beschikbaar is. Om een ​​zelfconsistente back-up van de datadirectory te bereiken, moet de databaseserver worden afgesloten voordat deze wordt gekopieerd. PostgreSQL biedt flexibiliteit om pg_xlog en pg_tblspce in verschillende koppelpunten te houden via softlink. Gebruik de onderstaande opdracht tijdens het kopiëren van de /data-map inclusief de gegevens van de softlink.

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

Hot back-up (online back-up):

In Hot Backup is het cluster actief en moet de database in de archieflogboekmodus staan. Twee systeemfuncties zullen de instantie informeren over het starten en stoppen van het Hot Backup-proces (pg_start_backup(),pg_stop_backup()). Voordat we verder gaan met Online back-up, laten we het hebben over de databasearchieflogboekmodus die verplicht is voor online back-ups.

WAL-archivering inschakelen:

Komende berichten van mij zullen kort zijn over PITR / Tunning WAL enz., momenteel kijken we naar WAL-archivering. In het PostgreSQL-databasesysteem 'schrijft' de eigenlijke database naar een toevoegingsbestand met de naam write-ahead log (WAL) naar schijf. Het bevat een record van schrijfbewerkingen die in het databasesysteem zijn gemaakt. In het geval van Crash kan de database worden gerepareerd/hersteld uit deze records.

Normaal gesproken wordt het write-ahead-logboek met regelmatige tussenpozen (Checkpoints genoemd) vergeleken met de database en vervolgens verwijderd omdat het niet langer nodig is. U kunt de WAL ook als back-up gebruiken, omdat er een record is van alle schrijfbewerkingen naar de database.

Concept van WAL-archivering:

Het vooruitschrijflogboek bestaat uit elk 16 MB groot, die segmenten worden genoemd. De WAL's bevinden zich onder de map pg_xlog en het is de submap van 'datadirectory'. De bestandsnamen worden numeriek genoemd in oplopende volgorde door PostgreSQL-instantie. Om een ​​back-up op basis van WAL te maken, heeft men een basisback-up nodig, dat wil zeggen een volledige back-up van de datadirectory en de WAL-segmenten tussen de basisback-up en de huidige datum.

Het configureren van de archivering van WAL-segmenten kan worden gekozen door de twee configuratieparameters archive_command en archive_mode in te stellen in postgresql.conf. Om het cluster in Archief-log-modus te zetten, is HERSTART nodig.

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

Opmerking: % p om het bestand te kopiëren met pad dat als bestandsnaam wordt gebruikt en % f zonder een directoryvermelding voor het doelbestand.

Raadpleeg voor meer informatie over het Archiver-proces de post PostgreSQL 9.0 Memory &Processess.

Online back-up:

Om online back-up te maken:

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

Opmerking: Het is niet nodig dat deze twee functies in dezelfde databaseverbinding worden uitgevoerd. De back-upmodus is globaal en permanent.

In PostgreSQL is er geen catalogus om de start- en stoptijd van de online back-up op te slaan. Wanneer er echter een online back-up aan de gang is, worden enkele van de bestanden gemaakt en verwijderd.

pg_start_backup(‘label’) en pg_stop_backup zijn de twee systeemfuncties om de online back-up uit te voeren. Met pg_start_backup(‘label’) wordt een bestand backup_label aangemaakt onder $PGDATA directory en met pg_stop_backup() een bestand ‘wal-segement-number.backup’ bestand aangemaakt onder $PGDATA/pg_xlog. Backup_label geeft de starttijd en de locatie van het controlepunt van het WAL-segment, het zal ook de PostgreSQL-instantie laten weten dat het cluster zich in de BACKUP-MODE bevindt. 'wal-segment-number.backup' bestand onder $PGDATA/pg_xlog directory beschrijft de start- en stoptijd, Checkpoint-locatie met WAL-segmentnummer.

Opmerking:na pg_stop_backup() wordt het bestand backup_label verwijderd door de PostgreSQL-instantie.

Plaats uw opmerkingen, suggesties.


  1. Kan een CONTAINS- of FREETEXT-predikaat niet gebruiken voor een tabel of geïndexeerde weergave omdat deze niet in volledige tekst is geïndexeerd

  2. Waarom kan er slechts één TIMESTAMP-kolom zijn met CURRENT_TIMESTAMP in de DEFAULT-clausule?

  3. PostgreSQL-deadlocks vermijden bij het uitvoeren van bulkupdate- en verwijderingsbewerkingen

  4. 8 manieren om seconden toe te voegen aan een datetime-waarde in MariaDB