Kako varnostno kopirati in obnoviti bazo podatkov PostgreSQL


V produkcijskem okolju, ne glede na to, kako velika ali majhna je vaša baza podatkov PostgreSQL, je redno vračanje ključnega vidika upravljanja z bazami podatkov. V tem članku boste izvedeli, kako varnostno kopirati in obnoviti bazo podatkov PostgreSQL.

Predvidevamo, da že imate delujočo namestitev sistema baz podatkov PostgreSQL. V nasprotnem primeru preberite naslednje članke o namestitvi PostgreSQL na vašo distribucijo Linuxa.

  • Kako namestiti PostgreSQL in pgAdmin4 v Ubuntu 20.04
  • Kako namestiti PostgreSQL in pgAdmin v CentOS 8
  • Kako namestiti PostgreSQL in pgAdmin v RHEL 8

Začnimo…

Varnostno kopirajte eno bazo podatkov PostgreSQL

PostgreSQL ponuja pripomoček pg_dump za pomoč pri varnostnem kopiranju baz podatkov. Ustvari datoteko baze podatkov z ukazi SQL v obliki, ki jo je mogoče v prihodnosti enostavno obnoviti.

Če želite varnostno kopirati bazo podatkov PostgreSQL, se najprej prijavite v strežnik zbirke podatkov, nato preklopite na uporabniški račun Postgres in zaženite pg_dump, kot sledi ( tecmintdb zamenjajte z imenom baze podatkov, ki jo želite varnostno kopirati) . Izhodna oblika je privzeto skriptna datoteka SQL z navadnim besedilom.

$ pg_dump tecmintdb > tecmintdb.sql

Pg_dump podpira tudi druge izhodne formate. Izhodno obliko lahko določite z možnostjo -F , pri čemer c pomeni arhivsko datoteko po meri, d pomeni arhiv oblike imenika in t pomeni arhivsko datoteko formata tar: vsi formati so primerni za vnos v pg_restore.

Na primer:

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

Če želite izpis izpisati v izhodni obliki imenika, uporabite zastavico -f (ki se uporablja za določanje izhodne datoteke), da namesto datoteke določite ciljni imenik. Imenik, ki ga bo ustvaril pg_dump, ne sme obstajati.

$ pg_dump -F d tecmintdb -f tecmintdumpdir	

Če želite varnostno kopirati vse zbirke podatkov PostgreSQL, uporabite orodje pg_dumpall, kot je prikazano.

$ pg_dumpall > all_pg_dbs.sql

Odlagališče lahko obnovite s pomočjo psql, kot je prikazano.

$ pgsql -f all_pg_dbs.sql postgres

Obnovitev zbirke podatkov PostgreSQL

Če želite obnoviti bazo podatkov PostgreSQL, lahko uporabite pripomočke psql ali pg_restore. psql se uporablja za obnovitev besedilnih datotek, ki jih je ustvaril pg_dump, medtem ko se pg_restore uporablja za obnovitev zbirke podatkov PostgreSQL iz arhiva, ki ga je ustvaril pg_dump, v enem od formatov, ki niso golo besedilo (po meri, tar ali imenik).

Tu je primer, kako obnoviti izpis navadne besedilne datoteke:

$ psql tecmintdb < tecmintdb.sql

Kot smo že omenili, izpis v obliki zapisa po meri ni skript za pgsql, zato ga je treba obnoviti s pg_restore, kot je prikazano.

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

Varnostno kopirajte velike zbirke podatkov PostgreSQL

Če je baza podatkov, ki jo varnostno kopirate, velika in želite ustvariti dokaj manjšo izhodno datoteko, lahko zaženete stisnjen izpis, kjer morate filtrirati izhod pg_dump s pomočjo stiskalnega orodja, kot je gzip ali katerega koli od vaših najljubših:

$ pg_dump tecmintdb | gzip > tecmintdb.gz

Če je baza podatkov izjemno velika, lahko vzporedno dumpnete tako, da istočasno odvržete tabele number_of_jobs z uporabo zastavice -j , kot je prikazano.

$ pg_dump -F d -j 5 -f tecmintdumpdir

Pomembno je omeniti, da možnost vzporednega izpisa zmanjšuje čas izpisa, po drugi strani pa povečuje tudi obremenitev strežnika baze podatkov.

Varnostno kopirajte oddaljene zbirke podatkov PostgreSQL

pg_dump je običajno odjemalsko orodje PostgreSQL in podpira delovanje na oddaljenih strežnikih baz podatkov. Če želite določiti oddaljeni strežnik baz podatkov, mora pg_dump vzpostaviti stik, z možnostmi ukazne vrstice -h določite oddaljenega gostitelja, -p pa določi oddaljena vrata, na katerih posluša strežnik baz podatkov . Poleg tega z zastavico -U določite ime vloge baze podatkov, s katero se želite povezati.

Ne pozabite zamenjati 10.10.20.10 in 5432 ter tecmintdb z naslovom IP oddaljenega gostitelja oziroma imenom gostitelja, vrati baze podatkov in imenom baze podatkov.

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

Prepričajte se, da ima uporabnik, ki se povezuje na daljavo, zahtevane pravice za dostop do baze podatkov in da je ustrezen način preverjanja pristnosti baze podatkov konfiguriran na strežniku baze podatkov, sicer se prikaže napaka, kakršna je prikazana na naslednjem posnetku zaslona.

Prav tako je mogoče bazo podatkov izpisati neposredno z enega strežnika na drugega, uporabite pripomočka pg_dump in psql, kot je prikazano.

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

Samodejno varnostno kopiranje zbirke podatkov PostgreSQL z uporabo opravila Cron

Varnostne kopije lahko izvajate v rednih intervalih z uporabo opravil cron. Opravila Cron so pogosto uporabljeno sredstvo za razporejanje različnih vrst nalog, ki se izvajajo na strežniku.

Nalogo cron lahko konfigurirate za avtomatizacijo varnostnega kopiranja zbirke podatkov PostgreSQL, kot sledi. Upoštevajte, da morate kot super uporabnik PostgreSQL zagnati naslednje ukaze:

$ mkdir -p /srv/backups/databases

Nato zaženite naslednji ukaz, da uredite crontab in dodate novo opravilo cron.

$ crontab -e

Kopirajte in prilepite naslednjo vrstico na konec crontaba. Uporabite lahko katero koli zgoraj razloženo obliko izpisa.

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

Shranite datoteko in zapustite.

Storitev cron bo samodejno začela izvajati to novo opravilo brez ponovnega zagona. In to opravilo cron se bo izvajalo vsak dan ob polnoči, je minimalna rešitev za varnostno kopiranje.

Za več informacij o načrtovanju opravil cron glejte: Kako ustvariti in upravljati opravila Cron v Linuxu

Za zdaj je to! Priporočljivo je, da varnostno kopiranje podatkov postane del vaše rutine upravljanja baz podatkov. Če nas želite kontaktirati za kakršna koli vprašanja ali komentarje, uporabite spodnji obrazec za povratne informacije. Za več informacij glejte referenčne strani pg_restore.