In een productieomgeving, hoe groot of klein uw PostgreSQL . ook is database mag zijn, is regelmatige back-up een essentieel aspect van databasebeheer. In dit artikel leert u hoe u een back-up kunt maken van een PostgreSQL-database en deze kunt herstellen.
We gaan ervan uit dat je al een werkende installatie van het PostgreSQL-databasesysteem hebt. Zo niet, lees dan onze volgende artikelen om PostgreSQL te installeren op je Linux-distributie.
- Hoe PostgreSQL en pgAdmin4 in Ubuntu 20.04 te installeren
- Hoe PostgreSQL en pgAdmin in CentOS 8 te installeren
- Hoe PostgreSQL en pgAdmin in RHEL 8 te installeren
Laten we beginnen...
Back-up van één enkele PostgreSQL-database
PostgreSQL biedt de pg_dump hulpprogramma om u te helpen back-ups te maken van databases. Het genereert een databasebestand met SQL-commando's in een formaat dat in de toekomst gemakkelijk kan worden hersteld.
Om een back-up te maken, een PostgreSQL database, log eerst in op uw databaseserver en schakel vervolgens over naar de Postgres gebruikersaccount en voer pg_dump . uit als volgt (vervang tecmintdb
met de naam van de database waarvan u een back-up wilt maken). Het uitvoerformaat is standaard een SQL-scriptbestand met platte tekst.
$ pg_dump tecmintdb > tecmintdb.sql
De pg_dump ondersteunt ook andere uitvoerformaten. U kunt het uitvoerformaat specificeren met de -F
optie, waarbij c
betekent archiefbestand met aangepast formaat, d
betekent archief in mapformaat, en t
betekent archiefbestand in tar-formaat:alle formaten zijn geschikt voor invoer in pg_restore .
Bijvoorbeeld:
$ pg_dump -F c tecmintdb > tecmintdb.dump OR $ pg_dump -F t tecmintdb > tecmintdb.tar
Gebruik de -f
. om de uitvoer in het directory-uitvoerformaat te dumpen vlag (die wordt gebruikt om het uitvoerbestand op te geven) om de doelmap op te geven in plaats van een bestand. De map die wordt aangemaakt door pg_dump mag niet bestaan.
$ pg_dump -F d tecmintdb -f tecmintdumpdir
Een back-up maken van alle PostgreSQL databases, gebruik de pg_dumpall gereedschap zoals weergegeven.
$ pg_dumpall > all_pg_dbs.sql
U kunt de dump herstellen met psql zoals afgebeeld.
$ pgsql -f all_pg_dbs.sql postgres
Een PostgreSQL-database herstellen
Een PostgreSQL herstellen database, kunt u de psql of pg_restore Gereedschap. psql wordt gebruikt om tekstbestanden te herstellen die zijn gemaakt door pg_dump overwegende dat pg_restore wordt gebruikt om een PostgreSQL-database te herstellen vanuit een archief gemaakt door pg_dump in een van de niet-platte tekstformaten (aangepast, tar of directory).
Hier is een voorbeeld van hoe u een onbewerkte tekstbestandsdump kunt herstellen:
$ psql tecmintdb < tecmintdb.sql
Zoals hierboven vermeld, is een dump in aangepaste indeling geen script voor pgsql , dus het moet worden hersteld met pg_restore zoals afgebeeld.
$ pg_restore -d tecmintdb tecmintdb.dump OR $ pg_restore -d tecmintdb tecmintdb.tar OR $ pg_restore -d tecmintdb tecmintdumpdir
Back-up van grote PostgreSQL-databases
Als de database waarvan u een back-up maakt groot is en u een vrij kleiner uitvoerbestand wilt genereren, kunt u een gecomprimeerde dump uitvoeren waarbij u de uitvoer van pg_dump moet filteren via een compressietool zoals gzip of een van je favorieten:
$ pg_dump tecmintdb | gzip > tecmintdb.gz
Als de database extreem groot is, kunt u parallel dumpen door number_of_jobs . te dumpen tabellen tegelijkertijd met de -j
vlag, zoals weergegeven.
$ pg_dump -F d -j 5 -f tecmintdumpdir
Het is belangrijk op te merken dat de parallelle dump-optie de tijd van de dump verkort, maar aan de andere kant ook de belasting van de databaseserver verhoogt.
Back-up van externe PostgreSQL-databases
pg_dump is een reguliere PostgreSQL-clienttool en ondersteunt bewerkingen op externe databaseservers. De externe databaseserver specificeren pg_dump contact moet opnemen, gebruik dan de opdrachtregelopties -h
om de externe host op te geven en -p
specificeert de externe poort waarop de databaseserver luistert. Gebruik bovendien de -U
vlag om de naam van de databaserol op te geven waarmee verbinding moet worden gemaakt.
Vergeet niet om 10.10.20.10 te vervangen en 5432 en tecmintdb met respectievelijk uw externe host-IP-adres of hostnaam, databasepoort en databasenaam.
$ pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql
Zorg ervoor dat de gebruiker die op afstand verbinding maakt de vereiste rechten heeft om toegang te krijgen tot de database en dat de juiste database-authenticatiemethode is geconfigureerd op de databaseserver, anders krijgt u een foutmelding zoals in de volgende schermafbeelding.
Het is ook mogelijk om een database rechtstreeks van de ene server naar de andere te dumpen, gebruik hiervoor de pg_dump en psql hulpprogramma's zoals weergegeven.
$ pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb
Automatische back-up van PostgreSQL-database met behulp van een cron-taak
U kunt met regelmatige tussenpozen back-ups maken met cron banen. Cron taken zijn een veelgebruikt middel om verschillende soorten taken op een server te plannen.
U kunt een cron-taak configureren om PostgreSQL te automatiseren databaseback-up als volgt. Merk op dat u de volgende opdrachten moet uitvoeren als PostgreSQL-supergebruiker:
$ mkdir -p /srv/backups/databases
Voer vervolgens de volgende opdracht uit om de crontab te bewerken om een nieuwe cron-taak toe te voegen.
$ crontab -e
Kopieer en plak de volgende regel aan het einde van de crontab. U kunt elk van de hierboven beschreven dumpformaten gebruiken.
0 0 * * * pg_dump -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql
Sla het bestand op en sluit af.
De cron-service start automatisch met het uitvoeren van deze nieuwe taak zonder opnieuw op te starten. En deze cron-taak wordt elke dag om middernacht uitgevoerd, het is een minimale oplossing voor de back-uptaak.
Voor meer informatie over het plannen van cron-taken, zie:Cron-taken maken en beheren op Linux
Dat is het voor nu! Het is een goed idee om het maken van back-ups van gegevens een onderdeel van uw databasebeheerroutine te maken. Gebruik het onderstaande feedbackformulier om ons te bereiken voor vragen of opmerkingen. Zie de pg_dump en pg_restore referentiepagina's voor meer informatie.