Com fer una còpia de seguretat i restaurar una base de dades PostgreSQL


En un entorn de producció, per molt gran o petita que sigui la vostra base de dades PostgreSQL, el retorn normal és un aspecte essencial de la gestió de bases de dades. En aquest article, aprendràs a fer una còpia de seguretat i restaurar una base de dades PostgreSQL.

Suposem que ja teniu una instal·lació en funcionament del sistema de bases de dades PostgreSQL. Si no, llegiu els nostres articles següents per instal·lar PostgreSQL a la vostra distribució Linux.

  • Com instal·lar PostgreSQL i pgAdmin4 a Ubuntu 20.04
  • Com instal·lar PostgreSQL i pgAdmin a CentOS 8
  • Com instal·lar PostgreSQL i pgAdmin a RHEL 8

Comencem…

Còpia de seguretat d'una única base de dades PostgreSQL

PostgreSQL proporciona la utilitat pg_dump per ajudar-vos a fer una còpia de seguretat de les bases de dades. Genera un fitxer de base de dades amb ordres SQL en un format que es pot restaurar fàcilment en el futur.

Per fer una còpia de seguretat d'una base de dades PostgreSQL, comenceu iniciant sessió al vostre servidor de bases de dades, després canvieu al compte d'usuari de Postgres i executeu pg_dump de la manera següent (substituïu tecmintdb pel nom de la base de dades de la qual voleu fer una còpia de seguretat) . Per defecte, el format de sortida és un fitxer d'script SQL de text sense format.

$ pg_dump tecmintdb > tecmintdb.sql

El pg_dump també admet altres formats de sortida. Podeu especificar el format de sortida mitjançant l'opció -F, on c significa fitxer d'arxiu de format personalitzat, d significa arxiu de format de directori i t significa fitxer d'arxiu en format tar: tots els formats són adequats per introduir-los a pg_restore.

Per exemple:

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

Per bolcar la sortida en el format de sortida del directori, utilitzeu el senyalador -f (que s'utilitza per especificar el fitxer de sortida) per especificar el directori de destinació en lloc d'un fitxer. El directori que serà creat per pg_dump no ha d'existir.

$ pg_dump -F d tecmintdb -f tecmintdumpdir	

Per fer una còpia de seguretat de totes les bases de dades PostgreSQL, utilitzeu l'eina pg_dumpall tal com es mostra.

$ pg_dumpall > all_pg_dbs.sql

Podeu restaurar l'abocament mitjançant psql tal com es mostra.

$ pgsql -f all_pg_dbs.sql postgres

Restauració d'una base de dades PostgreSQL

Per restaurar una base de dades PostgreSQL, podeu utilitzar les utilitats psql o pg_restore. psql s'utilitza per restaurar fitxers de text creats per pg_dump mentre que pg_restore s'utilitza per restaurar una base de dades PostgreSQL des d'un arxiu creat per pg_dump en un dels formats que no són de text pla (personalitzat, tar o directori).

Aquí teniu un exemple de com restaurar un abocament de fitxers de text senzill:

$ psql tecmintdb < tecmintdb.sql

Com s'ha esmentat anteriorment, un abocament de format personalitzat no és un script per a pgsql, de manera que s'ha de restaurar amb pg_restore tal com es mostra.

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

Còpia de seguretat de grans bases de dades PostgreSQL

Si la base de dades de la qual feu una còpia de seguretat és gran i voleu generar un fitxer de sortida força més petit, podeu executar un abocament comprimit on haureu de filtrar la sortida de pg_dump mitjançant una eina de compressió com ara gzip o qualsevol de les vostres preferides:

$ pg_dump tecmintdb | gzip > tecmintdb.gz

Si la base de dades és extremadament gran, podeu bolcar en paral·lel abocant les taules de nombre_de_treballs simultàniament utilitzant la marca -j, com es mostra.

$ pg_dump -F d -j 5 -f tecmintdumpdir

És important tenir en compte que l'opció d'abocament en paral·lel redueix el temps de l'abocament, però d'altra banda, també augmenta la càrrega del servidor de bases de dades.

Còpia de seguretat de bases de dades PostgreSQL remotes

pg_dump és una eina de client PostgreSQL normal, admet operacions en servidors de bases de dades remots. Per especificar el servidor de base de dades remot que pg_dump ha de contactar, utilitzeu les opcions de línia d'ordres -h per especificar l'amfitrió remot i -p especifica el port remot on escolta el servidor de base de dades. . A més, utilitzeu el senyalador -U per especificar el nom del rol de la base de dades per connectar-vos.

Recordeu substituir 10.10.20.10 i 5432 i tecmintdb amb l'adreça IP de l'amfitrió remot o el nom d'amfitrió, el port de la base de dades i el nom de la base de dades respectivament.

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

Assegureu-vos que l'usuari que es connecta de forma remota tingui els privilegis necessaris per accedir a la base de dades i que el mètode d'autenticació de la base de dades adequat estigui configurat al servidor de la base de dades, en cas contrari, obtindreu un error com el que es mostra a la captura de pantalla següent.

També és possible bolcar una base de dades directament d'un servidor a un altre, utilitzant les utilitats pg_dump i psql tal com es mostra.

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

Còpia de seguretat automàtica de la base de dades PostgreSQL mitjançant un treball Cron

Podeu fer còpies de seguretat a intervals regulars mitjançant tasques cron. Els treballs Cron són un mitjà d'ús habitual per programar diversos tipus de tasques per executar-se en un servidor.

Podeu configurar un treball cron per automatitzar la còpia de seguretat de la base de dades PostgreSQL de la següent manera. Tingueu en compte que heu d'executar les ordres següents com a superusuari de PostgreSQL:

$ mkdir -p /srv/backups/databases

A continuació, executeu l'ordre següent per editar el crontab per afegir un nou treball de cron.

$ crontab -e

Copieu i enganxeu la línia següent al final del crontab. Podeu utilitzar qualsevol dels formats d'abocament explicats anteriorment.

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

Desa el fitxer i surt.

El servei cron començarà automàticament a executar aquest nou treball sense reiniciar-lo. I aquest treball cron s'executarà cada dia a mitjanit, és una solució mínima per a la tasca de còpia de seguretat.

Per obtenir més informació sobre com programar treballs de cron, vegeu: Com crear i gestionar treballs de cron a Linux

Això és tot de moment! És una bona idea fer que la còpia de seguretat de les dades sigui part de la rutina de gestió de bases de dades. Per contactar amb nosaltres per a qualsevol pregunta o comentari, utilitzeu el formulari de comentaris que trobareu a continuació. Per obtenir més informació, consulteu les pàgines de referència de pg_restore.