sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur vet jag om min PostgreSQL-säkerhetskopia är bra?

Säkerhetskopiering är ett måste i alla katastrofåterställningsplaner. Det kanske inte alltid räcker för att garantera ett acceptabelt mål för återställningspunkten, men det är ett bra första tillvägagångssätt. Problemet är vad som händer om du, i händelse av misslyckande, behöver använda denna säkerhetskopia, och den inte är användbar av någon anledning? Förmodligen vill du inte vara i den situationen, så i den här bloggen kommer vi att se hur du bekräftar om din säkerhetskopia är bra att använda.

Typer av PostgreSQL-säkerhetskopier

Låt oss börja prata om de olika typerna av säkerhetskopior. Det finns olika typer, men i allmänhet kan vi separera det i två enkla kategorier:

  • Logiskt :Säkerhetskopieringen lagras i ett läsbart format som SQL.
  • Fysisk :Säkerhetskopieringen innehåller binära data.

Varför nämner vi detta? För vi kommer att se att det finns några kontroller vi kan göra för en typ och inte för den andra.

Kontrollera säkerhetskopieringsloggarna

Det första sättet att bekräfta om allt går bra är genom att kontrollera backuploggarna.

Det enklaste kommandot för att köra en PostgreSQL-säkerhetskopia kan till exempel vara:

$ pg_dumpall > /path/to/dump.sql

Men hur kan jag veta om det uppstod ett fel när kommandot kördes? Du kan bara lägga till för att skicka utdata till någon specifik loggfil:

$ pg_dumpall > /path/to/dump.sql > /var/log/postgres/pg_dump.log

Så, du kan lägga till den här raden i serverns cron för att köra den varje dag:

30 0 * * * pg_dumpall > /path/to/dump.sql > /var/log/postgres/pg_dump.log

Och du bör övervaka loggfilen för att leta efter fel, till exempel lägga till den i något övervakningsverktyg som Nagios.

Det räcker inte att kontrollera loggar för att bekräfta att säkerhetskopieringen kommer att fungera, för om till exempel säkerhetskopian är skadad av någon anledning kommer du förmodligen inte att se det i loggfilen.

Kontrollera säkerhetskopieringsinnehållet

Om du använder logiska säkerhetskopior kan du verifiera innehållet i säkerhetskopian för att bekräfta att du har alla databaser där.

Du kan lista dina aktuella PostgreSQL-databaser med till exempel detta kommando:

$ psql -l | awk '{ print $1 }'| awk 'FNR > 3' |grep '^[a-zA-Z0-9]' |grep -v 'template0'

postgres

template1

world

Och kontrollera vilka databaser du har i backupfilen:

$ grep '^[\]connect' /path/to/dump.sql |awk '{print $2}'

template1

postgres

world

Problemet med den här kontrollen är att du inte kontrollerar storleken eller data, så det kan vara möjligt att du förlorar data om det uppstod något fel när säkerhetskopieringen utfördes.

Återställer för att kontrollera säkerhetskopian manuellt

Det säkraste sättet att bekräfta om en säkerhetskopia fungerar är att återställa den och komma åt databasen.

När säkerhetskopieringen är klar kan du återställa den manuellt i en annan värd genom att kopiera dumpfilen och köra till exempel:

$ psql -f /path/to/dump.sql postgres

Då kan du komma åt den och kontrollera databaserna:

$ psql

postgres=# \l

                                  List of databases

   Name    | Owner   | Encoding |   Collate | Ctype    | Access privileges

-----------+----------+----------+-------------+-------------+-----------------------

 postgres  | postgres | UTF8     | en_US.utf-8 | en_US.utf-8 |

 template0 | postgres | UTF8     | en_US.utf-8 | en_US.utf-8 | =c/postgres          +

           |          | |             | | postgres=CTc/postgres

 template1 | postgres | UTF8     | en_US.utf-8 | en_US.utf-8 | =c/postgres          +

           |          | |             | | postgres=CTc/postgres

 world     | postgres | UTF8     | en_US.utf-8 | en_US.utf-8 |

(4 rows)

Problemet med den här metoden är naturligtvis att du bör köra den manuellt, eller hitta ett sätt att automatisera detta, vilket kan vara en tidskrävande uppgift.

Automatisk ClusterControl-säkerhetskopiering

Nu ska vi se hur ClusterControl kan automatisera verifieringen av PostgreSQL-säkerhetskopior och hjälpa till att undvika överraskningar eller manuella uppgifter.

I ClusterControl, välj ditt kluster och gå till avsnittet "Säkerhetskopiering", välj sedan "Skapa säkerhetskopia".

Funktionen för automatisk säkerhetskopiering är tillgänglig för schemalagda säkerhetskopieringar. Så låt oss välja alternativet "Schemalägg säkerhetskopiering".

När du schemalägger en säkerhetskopia måste du, förutom att välja de vanliga alternativen som metod eller lagring, även ange schema/frekvens.

I nästa steg kan du komprimera och kryptera din säkerhetskopia och ange lagringstid. Här har du också funktionen "Verifiera säkerhetskopiering".

För att använda den här funktionen behöver du en dedikerad värd (eller virtuell dator) som är inte en del av klustret.

ClusterControl kommer att installera programvaran och den kommer att återställa säkerhetskopian i denna värd . Efter återställningen kan du se verifieringsikonen i avsnittet ClusterControl Backup.

Slutsats

Som vi nämnde är säkerhetskopior obligatoriska i alla miljöer, men säkerhetskopiering är inte en säkerhetskopia om du inte kan använda den. Så du bör se till att din säkerhetskopia är användbar om du behöver den en dag. I den här bloggen visade vi olika sätt att kontrollera din säkerhetskopia för att undvika problem när du vill återställa den.


  1. PostgreSQL återkallar behörigheter från pg_catalog-tabeller

  2. Hur man undkommer frågetecken (?) med Spring JpaRepository

  3. 2 sätt att returnera servernamnet i SQL Server (T-SQL)

  4. CHAR() Exempel i MySQL