sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man säkerhetskopierar och återställer en PostgreSQL-databas

I en produktionsmiljö, oavsett hur stor eller liten din PostgreSQL är databas kan vara, regelbunden tillbaka är en viktig aspekt av databashantering. I den här artikeln kommer du att lära dig hur du säkerhetskopierar och återställer en PostgreSQL-databas.

Vi antar att du redan har en fungerande installation av PostgreSQL-databassystemet. Om inte, läs våra följande artiklar för att installera PostgreSQL på din Linux-distribution.

  • Hur man installerar PostgreSQL och pgAdmin4 i Ubuntu 20.04
  • Hur man installerar PostgreSQL och pgAdmin i CentOS 8
  • Hur man installerar PostgreSQL och pgAdmin i RHEL 8

Låt oss komma igång...

Säkerhetskopiera en enda PostgreSQL-databas

PostgreSQL tillhandahåller pg_dump verktyg som hjälper dig att säkerhetskopiera databaser. Den genererar en databasfil med SQL-kommandon i ett format som enkelt kan återställas i framtiden.

För att säkerhetskopiera, en PostgreSQL databas, börja med att logga in på din databasserver och växla sedan till Postgres användarkonto och kör pg_dump enligt följande (ersätt tecmintdb med namnet på den databas du vill säkerhetskopiera). Som standard är utdataformatet en SQL-skriptfil med vanlig text.

$ pg_dump tecmintdb > tecmintdb.sql

pg_dump stöder även andra utdataformat. Du kan ange utdataformatet med -F alternativ, där c betyder arkivfil i anpassat format, d betyder katalogformat arkiv, och t betyder arkivfil i tjärformat:alla format är lämpliga för inmatning i pg_restore .

Till exempel:

$ pg_dump -F c tecmintdb > tecmintdb.dump
OR
$ pg_dump -F t tecmintdb > tecmintdb.tar

För att dumpa utdata i katalogutdataformatet, använd -f flagga (som används för att ange utdatafilen) för att ange målkatalogen istället för en fil. Katalogen som kommer att skapas av pg_dump får inte existera.

$ pg_dump -F d tecmintdb -f tecmintdumpdir	

För att säkerhetskopiera alla PostgreSQL databaser, använd pg_dumpall verktyg som visas.

$ pg_dumpall > all_pg_dbs.sql

Du kan återställa dumpen med psql som visas.

$ pgsql -f all_pg_dbs.sql postgres

Återställa en PostgreSQL-databas

För att återställa en PostgreSQL databas kan du använda psql eller pg_restore verktyg. psql används för att återställa textfiler skapade av pg_dump medan pg_restore används för att återställa en PostgreSQL databas från ett arkiv skapat av pg_dump i ett av de icke-oformaterade formaten (anpassad, tar eller katalog).

Här är ett exempel på hur man återställer en vanlig textfildump:

$ psql tecmintdb < tecmintdb.sql

Som nämnts ovan är en dump i anpassat format inte ett skript för pgsql , så det måste återställas med pg_restore som visas.

$ pg_restore -d tecmintdb tecmintdb.dump
OR
$ pg_restore -d tecmintdb tecmintdb.tar
OR
$ pg_restore -d tecmintdb tecmintdumpdir	

Säkerhetskopiera stora PostgreSQL-databaser

Om databasen du säkerhetskopierar är stor och du vill generera en ganska mindre utdatafil kan du köra en komprimerad dump där du måste filtrera utdata från pg_dump via ett komprimeringsverktyg som gzip eller någon av dina favoriter:

$ pg_dump tecmintdb | gzip > tecmintdb.gz

Om databasen är extremt stor kan du dumpa parallellt genom att dumpa antal_jobb tabeller samtidigt med -j flagga, som visas.

$ pg_dump -F d -j 5 -f tecmintdumpdir

Det är viktigt att notera att alternativet parallell dump minskar tiden för dumpningen, men å andra sidan ökar det också belastningen på databasservern.

Säkerhetskopiera fjärrpostgreSQL-databaser

pg_dump är ett vanligt PostgreSQL klientverktyg, det stöder operationer på fjärrdatabasservrar. För att ange fjärrdatabasservern pg_dump ska kontakta, använd kommandoradsalternativen -h för att ange fjärrvärden och -p anger fjärrporten som databasservern lyssnar på. Använd dessutom -U flagga för att ange namnet på databasrollen som ska anslutas som.

Kom ihåg att byta ut 10.10.20.10 och 5432 och tecmintdb med din fjärrvärdens IP-adress eller värdnamn, databasport respektive databasnamn.

$ pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

Se till att användaren som fjärransluter har de behörigheter som krävs för att komma åt databasen och att lämplig databasautentiseringsmetod är konfigurerad på databasservern, annars får du ett felmeddelande som det som visas i följande skärmdump.

Det är också möjligt att dumpa en databas direkt från en server till en annan, använd pg_dump och psql verktyg som visas.

$ pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

Automatisk säkerhetskopiering av PostgreSQL-databas med ett Cron-jobb

Du kan göra säkerhetskopior med jämna mellanrum med cron jobb. Cron jobb är ett vanligt använda sätt att schemalägga olika typer av uppgifter för att köras på en server.

Du kan konfigurera ett cron-jobb för att automatisera PostgreSQL säkerhetskopiering av databas enligt följande. Observera att du måste köra följande kommandon som PostgreSQL-superanvändare:

$ mkdir -p /srv/backups/databases

Kör sedan följande kommando för att redigera crontab för att lägga till ett nytt cron-jobb.

$ crontab -e

Kopiera och klistra in följande rad i slutet av crontab. Du kan använda vilket som helst av dumpformaten som förklaras ovan.

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

Spara filen och avsluta.

Cron-tjänsten kommer automatiskt att börja köra det här nya jobbet utan omstart. Och detta cron-jobb kommer att köras varje dag vid midnatt, det är en minimilösning för säkerhetskopieringsuppgiften.

För mer information om hur du schemalägger cron-jobb, se:Hur man skapar och hanterar Cron-jobb på Linux

Det var allt för nu! Det är en bra idé att göra säkerhetskopiering av data till en del av din databashanteringsrutin. För att nå oss för eventuella frågor eller kommentarer, använd feedbackformuläret nedan. För mer information, se referenssidorna pg_dump och pg_restore.


  1. Deklarera och ställa in variabler i ett urvalsutdrag

  2. Finns det någon boolesk typ i Oracle-databaser?

  3. hur du gör din data horisontell

  4. SQL välj max(datum) och motsvarande värde