Sådan sikkerhedskopieres og gendannes en PostgreSQL-database


I et produktionsmiljø, uanset hvor stor eller lille din PostgreSQL-database måtte være, er regelmæssig tilbage et vigtigt aspekt af databasestyring. I denne artikel lærer du, hvordan du sikkerhedskopierer og gendanner en PostgreSQL-database.

Vi antager, at du allerede har en fungerende installation af PostgreSQL-databasesystemet. Hvis ikke, skal du læse vores følgende artikler for at installere PostgreSQL på din Linux-distribution.

  • How to Install PostgreSQL and pgAdmin4 in Ubuntu 20.04
  • How to Install PostgreSQL and pgAdmin in CentOS 8
  • How to Install PostgreSQL and pgAdmin in RHEL 8

Lad os komme igang…

Sikkerhedskopier en enkelt PostgreSQL-database

PostgreSQL leverer værktøjet pg_dump til at hjælpe dig med at sikkerhedskopiere databaser. Det genererer en databasefil med SQL-kommandoer i et format, der let kan gendannes i fremtiden.

For at tage backup af en PostgreSQL-database skal du starte med at logge ind på din databaseserver, derefter skifte til Postgres-brugerkontoen og køre pg_dump som følger (udskift tecmintdb med navnet på den database, du vil sikkerhedskopiere) . Som standard er outputformatet en SQL-scriptfil med almindelig tekst.

$ pg_dump tecmintdb > tecmintdb.sql

Pg_dump understøtter også andre outputformater. Du kan specificere outputformatet ved hjælp af indstillingen -F , hvor c betyder arkivfil til brugerdefineret format, d betyder arkivformatarkiv og t betyder arkivfil med tjæreformat: alle formater er egnede til input til pg_restore.

For eksempel:

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

For at dumpe output i katalogets outputformat skal du bruge -f -flagget (som bruges til at specificere outputfilen) til at angive målmappen i stedet for en fil. Kataloget, der oprettes af pg_dump, må ikke eksistere.

$ pg_dump -F d tecmintdb -f tecmintdumpdir	

For at sikkerhedskopiere alle PostgreSQL-databaser skal du bruge værktøjet pg_dumpall som vist.

$ pg_dumpall > all_pg_dbs.sql

Du kan gendanne dumpen ved hjælp af psql som vist.

$ pgsql -f all_pg_dbs.sql postgres

Gendannelse af en PostgreSQL-database

For at gendanne en PostgreSQL-database kan du bruge hjælpeprogrammerne psql eller pg_restore. psql bruges til at gendanne tekstfiler oprettet af pg_dump, mens pg_restore bruges til at gendanne en PostgreSQL-database fra et arkiv oprettet af pg_dump i et af de ikke-almindelige tekstformater (brugerdefineret, tar eller katalog).

Her er et eksempel på, hvordan du gendanner en almindelig tekstfil dump:

$ psql tecmintdb < tecmintdb.sql

Som nævnt ovenfor er en brugerdefineret formatdump ikke et script til pgsql, så det skal gendannes med pg_restore som vist.

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

Sikkerhedskopier store PostgreSQL-databaser

Hvis den database, du sikkerhedskopierer, er stor, og du vil generere en ret mindre outputfil, kan du køre en komprimeret dump, hvor du skal filtrere output fra pg_dump via et komprimeringsværktøj som gzip eller en af dine favoritter:

$ pg_dump tecmintdb | gzip > tecmintdb.gz

Hvis databasen er ekstremt stor, kan du dumpe parallelt ved at dumpe number_of_jobs-tabeller samtidigt ved hjælp af flagget -j , som vist.

$ pg_dump -F d -j 5 -f tecmintdumpdir

Det er vigtigt at bemærke, at den parallelle dump-indstilling reducerer dumpingstiden, men på den anden side øger den også belastningen på databaseserveren.

Backup af Remote PostgreSQL-databaser

pg_dump er et almindeligt PostgreSQL-klientværktøj, det understøtter operationer på eksterne databaseservere. For at specificere den eksterne databaseserver skal pg_dump kontakte, brug kommandolinjemulighederne -h til at angive den eksterne vært, og -p angiver den fjernport, databaseserveren lytter til . Brug desuden flag -U til at angive databasens rollenavn, der skal forbindes som.

Husk at erstatte 10.10.20.10 og 5432 og tecmintdb med henholdsvis din eksterne værts-IP-adresse eller værtsnavn, databaseport og databasenavn.

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

Sørg for, at den bruger, der opretter forbindelse eksternt, har de nødvendige rettigheder til at få adgang til databasen, og at den relevante databaseautentificeringsmetode er konfigureret på databaseserveren, ellers får du en fejl som den, der vises i det følgende skærmbillede.

Det er også muligt at dumpe en database direkte fra en server til en anden. Brug hjælpeprogrammerne pg_dump og psql som vist.

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

Auto Backup PostgreSQL-database ved hjælp af et Cron-job

Du kan udføre sikkerhedskopier med jævne mellemrum ved hjælp af cron-job. Cron-job er et almindeligt anvendt middel til planlægning af forskellige slags opgaver, der skal køres på en server.

Du kan konfigurere et cron-job til at automatisere PostgreSQL-databasebackup som følger. Bemærk, at du skal køre følgende kommandoer som PostgreSQL-superbruger:

$ mkdir -p /srv/backups/databases

Kør derefter følgende kommando for at redigere crontab for at tilføje et nyt cron-job.

$ crontab -e

Kopier og indsæt følgende linje i slutningen af crontab. Du kan bruge et hvilket som helst af de dumpformater, der er forklaret ovenfor.

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

Gem filen og afslut.

Cron-tjenesten begynder automatisk at køre dette nye job uden en genstart. Og dette cron-job kører hver dag ved midnat, det er en minimumsløsning til backup-opgaven.

For mere information om, hvordan du planlægger cron-job, se: Sådan oprettes og styres Cron-job på Linux

Det er det for nu! Det er en god idé at gøre sikkerhedskopiering af data til en del af din databasestyringsrutine. Brug feedbackformularen nedenfor for at nå os til spørgsmål eller kommentarer. For mere information, se referencesiderne pg_dump og pg_restore.