Kako napraviti sigurnosnu kopiju i vratiti PostgreSQL bazu podataka


U proizvodnom okruženju, bez obzira koliko velika ili mala vaša PostgreSQL baza podataka može biti, redovno sigurnosno kopiranje je bitan aspekt upravljanja bazom podataka. U ovom članku ćete naučiti kako napraviti sigurnosnu kopiju i vratiti PostgreSQL bazu podataka.

Pretpostavljamo da već imate ispravnu instalaciju PostgreSQL sistema baze podataka. Ako ne, pročitajte naše sljedeće članke da instalirate PostgreSQL na svoju distribuciju Linuxa.

Hajde da počnemo…

Napravite sigurnosnu kopiju jedne PostgreSQL baze podataka

PostgreSQL pruža uslužni program pg_dump koji će vam pomoći da napravite sigurnosnu kopiju baza podataka. Generiše datoteku baze podataka sa SQL komandama u formatu koji se može lako vratiti u budućnosti.

Da napravite rezervnu kopiju, PostgreSQL bazu podataka, počnite tako što ćete se prijaviti na vaš server baze podataka, zatim se prebacite na Postgres korisnički račun i pokrenite pg_dump na sljedeći način (zamijenite tecmintdb imenom baze podataka koju želite napraviti sigurnosnu kopiju). Po defaultu, izlazni format je običan tekst SQL skript datoteka.

pg_dump tecmintdb > tecmintdb.sql

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

Na primjer:

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

Za dump izlaz u izlaznom formatu direktorija, koristite oznaku -f (koja se koristi za specificiranje izlazne datoteke) da odredite ciljni direktorij umjesto datoteke. Direktorij koji će kreirati pg_dump ne smije postojati.

pg_dump -F d tecmintdb -f tecmintdumpdir	

Da napravite sigurnosnu kopiju 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

Da biste vratili PostgreSQL bazu podataka, možete koristiti psql ili pg_restore uslužne programe. psql se koristi za vraćanje tekstualnih fajlova kreiranih pomoću pg_dump dok se pg_restore koristi za vraćanje PostgreSQL baze podataka iz arhive koju kreira pg_dump< u jednom od formata koji nisu obični tekst (prilagođeni, tar ili direktorij).

Evo primjera kako vratiti dump datoteke običnog teksta:

psql tecmintdb < tecmintdb.sql

Kao što je gore spomenuto, dump prilagođenog formata nije skripta za psql, tako da 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	

Kompresovana rezervna kopija PostgreSQL baze podataka

Ako je baza podataka koju pravite velika i želite generirati prilično manji izlazni fajl, tada možete pokrenuti komprimirani dump gdje morate filtrirati izlaz pg_dump pomoću alata za kompresiju kao što je gzip ili bilo koji od vaših omiljenih:

pg_dump tecmintdb | gzip > tecmintdb.gz

Ako je baza podataka izuzetno velika, možete vršiti paralelni dump tako što ćete istovremeno izbaciti tabele broj_poslova koristeći oznaku -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 servera baze podataka.

Sigurnosna kopija udaljenih PostgreSQL baza podataka

pg_dump je običan PostgreSQL klijentski alat, podržava operacije na udaljenim serverima baze podataka. Da odredite server udaljene baze podataka pg_dump koji treba kontaktirati, koristite opcije komandne linije -h da navedete udaljenog hosta i -p određuje udaljenog port na kojem server baze podataka sluša. Osim toga, koristite oznaku -U da odredite ime uloge baze podataka za povezivanje.

Ne zaboravite zamijeniti 10.10.20.10 i 5432 i tecmintdb sa IP adresom vašeg udaljenog hosta ili imenom hosta, portom baze podataka i imenom 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ći način provjere autentičnosti baze podataka konfiguriran na poslužitelju baze podataka, u suprotnom ćete dobiti grešku poput one prikazane na sljedećem snimku ekrana.

Takođe je moguće dampirate bazu podataka direktno sa jednog servera na drugi, koristite pg_dump i psql uslužne programe kao što je prikazano.

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

Automatsko kopiranje PostgreSQL baze podataka pomoću Cron zadatka

Možete praviti sigurnosne kopije u redovnim intervalima koristeći cron poslove. Cron poslovi su uobičajeno sredstvo za zakazivanje različitih vrsta zadataka koji se izvršavaju na serveru.

Možete konfigurirati cron posao za automatizaciju sigurnosne kopije PostgreSQL baze podataka na sljedeći način. Imajte na umu da morate pokrenuti sljedeće komande 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 red na kraj crontab-a. Možete koristiti bilo koji od formata dump objašnjenja gore.

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

Sačuvajte fajl i izađite.

Cron servis će automatski pokrenuti ovaj novi posao bez ponovnog pokretanja. A ovaj cron posao će se izvoditi svaki dan u ponoć, to je minimalno rješenje za zadatak sigurnosne kopije.

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

To je to za sada! Dobra je ideja napraviti sigurnosnu kopiju podataka dijelom svoje rutine upravljanja bazom podataka. Da biste nas kontaktirali za bilo kakva pitanja ili komentare, koristite obrazac za povratne informacije u nastavku. Za više informacija pogledajte referentne stranice pg_dump i pg_restore.