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

Sådan sikkerhedskopieres og gendannes en PostgreSQL-database

I et produktionsmiljø, uanset hvor stor eller lille din PostgreSQL er database kan være, regelmæssig tilbage er et væsentligt aspekt af database management. 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, så læs vores følgende artikler for at installere PostgreSQL på din Linux-distribution.

  • Sådan installeres PostgreSQL og pgAdmin4 i Ubuntu 20.04
  • Sådan installeres PostgreSQL og pgAdmin i CentOS 8
  • Sådan installeres PostgreSQL og pgAdmin i RHEL 8

Lad os komme i gang...

Sikkerhedskopier en enkelt PostgreSQL-database

PostgreSQL giver pg_dump værktøj til at hjælpe dig med at sikkerhedskopiere databaser. Den genererer en databasefil med SQL-kommandoer i et format, der nemt kan gendannes i fremtiden.

For at sikkerhedskopiere, en PostgreSQL database, start med at logge på din databaseserver, og skift derefter til Postgres brugerkonto, og kør pg_dump som følger (erstat 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 angive outputformatet ved hjælp af -F mulighed, hvor c betyder tilpasset format arkivfil, d betyder biblioteksformat arkiv, og t betyder tar-format arkivfil:alle formater er velegnede til input i pg_restore .

For eksempel:

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

For at dumpe output i mappens outputformat skal du bruge -f flag (som bruges til at angive outputfilen) for at angive målbiblioteket i stedet for en fil. Mappen, som vil blive oprettet af pg_dump må ikke eksistere.

$ pg_dump -F d tecmintdb -f tecmintdumpdir	

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

$ pg_dumpall > all_pg_dbs.sql

Du kan gendanne dumpet 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 psql eller pg_restore forsyningsselskaber. 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 mappe).

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

$ psql tecmintdb < tecmintdb.sql

Som nævnt ovenfor er et dump i brugerdefineret format 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 databasen du sikkerhedskopierer er stor, og du vil generere en ret mindre outputfil, så kan du køre en komprimeret dump, hvor du skal filtrere outputtet fra pg_dump via et komprimeringsværktøj så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 antal_jobs tabeller samtidigt ved at bruge -j flag, som vist.

$ pg_dump -F d -j 5 -f tecmintdumpdir

Det er vigtigt at bemærke, at muligheden for parallel dump reducerer dumpningstiden, men på den anden side øger den også belastningen på databaseserveren.

Sikkerhedskopiering af eksterne PostgreSQL-databaser

pg_dump er et almindeligt PostgreSQL-klientværktøj, det understøtter operationer på eksterne databaseservere. For at angive den eksterne databaseserver pg_dump skal kontakte, skal du bruge kommandolinjeindstillingerne -h for at angive fjernværten og -p angiver den fjernport, som databaseserveren lytter på. Brug desuden -U flag for at angive databasens rollenavn, der skal oprettes forbindelse 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 fjerntilslutter, har de nødvendige rettigheder til at få adgang til databasen, og at den relevante databasegodkendelsesmetode er konfigureret på databaseserveren, ellers vil du få en fejl som den, der er vist i det følgende skærmbillede.

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

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

Automatisk backup af 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 brugt middel til at planlægge forskellige slags opgaver til at køre på en server.

Du kan konfigurere et cron-job til at automatisere PostgreSQL database backup 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 crontaben 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 dump-formater, der er forklaret ovenfor.

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

Gem filen og afslut.

Cron-tjenesten vil automatisk begynde at køre dette nye job uden 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 administreres 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. For at kontakte os for spørgsmål eller kommentarer, brug feedbackformularen nedenfor. For mere information, se pg_dump og pg_restore referencesiderne.


  1. Hvad svarer til bigint i C#?

  2. Websted nede og Twitter-feed

  3. Sideinddeling i SQL Server ved hjælp af OFFSET/FETCH

  4. Avanceret MySql-forespørgsel:Opdater tabel med info fra en anden tabel