Kako sigurnosno kopirati i vratiti PostgreSQL bazu podataka


U produkcijskom okruženju, bez obzira na to koliko velika ili mala vaša PostgreSQL baza podataka može biti, redovito sigurnosno kopiranje bitan je aspekt upravljanja bazom podataka. U ovom ćete članku naučiti kako sigurnosno kopirati i vratiti PostgreSQL bazu podataka.

Pretpostavljamo da već imate radnu instalaciju sustava baze podataka PostgreSQL. Ako niste, pročitajte naše sljedeće članke kako biste instalirali PostgreSQL na svoju distribuciju Linuxa.

Započnimo…

Sigurnosno kopirajte jednu PostgreSQL bazu podataka

PostgreSQL nudi uslužni program pg_dump koji vam pomaže napraviti sigurnosnu kopiju baza podataka. Generira datoteku baze podataka sa SQL naredbama u formatu koji se u budućnosti može lako obnoviti.

Za izradu sigurnosne kopije PostgreSQL baze podataka, počnite s prijavom na svoj poslužitelj baze podataka, zatim se prebacite na Postgres korisnički račun i pokrenite pg_dump na sljedeći način (zamijenite tecmintdb nazivom baze podataka koju želite sigurnosno kopirati). Prema zadanim postavkama, izlazni format je obična tekstualna datoteka SQL skripte.

pg_dump tecmintdb > tecmintdb.sql

pg_dump podržava i druge izlazne formate. Možete odrediti izlazni format pomoću opcije -F, gdje c znači arhivsku datoteku prilagođenog formata, d znači arhivu formata direktorija, a t znači arhivsku datoteku tar formata: svi formati su prikladni za unos u pg_restore.

Na primjer:

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

Za ispis izlaza u izlaznom formatu direktorija, upotrijebite oznaku -f (koja se koristi za određivanje izlazne datoteke) da odredite ciljni direktorij umjesto datoteke. Direktorij koji će kreirati pg_dump ne smije postojati.

pg_dump -F d tecmintdb -f tecmintdumpdir	

Za sigurnosno kopiranje svih PostgreSQL baza podataka, koristite alat pg_dumpall kao što je prikazano.

pg_dumpall > all_pg_dbs.sql

Dump možete vratiti koristeći psql kao što je prikazano.

psql -f all_pg_dbs.sql postgres

Vraćanje PostgreSQL baze podataka

Za vraćanje PostgreSQL baze podataka, možete koristiti psql ili pg_restore uslužne programe. psql se koristi za vraćanje tekstualnih datoteka koje je izradio pg_dump dok se pg_restore koristi za vraćanje PostgreSQL baze podataka iz arhive koju je izradio pg_dump< u jednom od formata koji nisu čisti tekst (prilagođeni, tar ili imenik).

Evo primjera kako vratiti dump datoteke običnog teksta:

psql tecmintdb < tecmintdb.sql

Kao što je gore spomenuto, ispis prilagođenog formata nije skripta za psql, pa se mora vratiti pomoću pg_restore kao što je prikazano.

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

Komprimirana sigurnosna kopija PostgreSQL baze podataka

Ako je baza podataka koju sigurnosno kopirate velika i želite generirati prilično manju izlaznu datoteku, tada možete pokrenuti komprimirani dump gdje morate filtrirati izlaz pg_dump putem alata za kompresiju kao što je gzip ili bilo koji od vaših omiljenih:

pg_dump tecmintdb | gzip > tecmintdb.gz

Ako je baza podataka iznimno velika, možete ispisati paralelno tako da ispisujete number_of_jobs tablice istovremeno pomoću oznake -j, kao što je prikazano.

pg_dump -F d -j 5 -f tecmintdumpdir

Važno je napomenuti da opcija paralelnog dumpa skraćuje vrijeme dumpa, ali s druge strane povećava i opterećenje poslužitelja baze podataka.

Sigurnosna kopija udaljenih PostgreSQL baza podataka

pg_dump je uobičajeni PostgreSQL klijentski alat, podržava operacije na udaljenim poslužiteljima baze podataka. Da biste odredili udaljeni poslužitelj baze podataka koji bi pg_dump trebao kontaktirati, upotrijebite opcije naredbenog retka -h da odredite udaljeni host i -p određuje udaljeni port poslužitelj baze podataka sluša. Osim toga, upotrijebite oznaku -U za navođenje imena uloge baze podataka za povezivanje.

Ne zaboravite zamijeniti 10.10.20.10 i 5432 i tecmintdb IP adresom vašeg udaljenog glavnog računala ili imenom glavnog računala, portom baze podataka i nazivom baze podataka.

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

Uvjerite se da korisnik koji se povezuje na daljinu ima potrebne privilegije za pristup bazi podataka i da je odgovarajuća metoda provjere autentičnosti baze podataka konfigurirana na poslužitelju baze podataka, u protivnom ćete dobiti pogrešku poput one prikazane na sljedećoj snimci zaslona.

Također je moguće ispisati bazu podataka izravno s jednog poslužitelja na drugi, upotrijebite pomoćne programe pg_dump i psql kao što je prikazano.

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

Automatsko sigurnosno kopiranje PostgreSQL baze podataka pomoću Cron Joba

Sigurnosne kopije možete izvoditi u redovitim intervalima koristeći cron poslove. Cron poslovi često su korišteno sredstvo za planiranje raznih vrsta zadataka za izvođenje na poslužitelju.

Možete konfigurirati cron posao za automatiziranje sigurnosnog kopiranja baze podataka PostgreSQL na sljedeći način. Imajte na umu da trebate pokrenuti sljedeće naredbe kao PostgreSQL superkorisnik:

mkdir -p /srv/backups/databases

Zatim pokrenite sljedeću naredbu da uredite crontab i dodate novi cron posao.

crontab -e

Kopirajte i zalijepite sljedeći redak na kraju crontab-a. Možete koristiti bilo koji od gore objašnjenih formata dumpa.

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

Spremite datoteku i izađite.

Usluga cron će automatski pokrenuti ovaj novi posao bez ponovnog pokretanja. I ovaj cron posao će se izvoditi svaki dan u ponoć, to je minimalno rješenje za backup zadatak.

Za više informacija o tome kako rasporediti cron poslove, pogledajte: Kako stvoriti i upravljati Cron poslovima na Linuxu

To je to za sada! Bilo bi dobro sigurnosno kopiranje podataka učiniti dijelom vaše rutine upravljanja bazom podataka. Da biste nam se obratili za bilo kakva pitanja ili komentare, upotrijebite obrazac za povratne informacije u nastavku. Za više informacija pogledajte referentne stranice pg_dump i pg_restore.