Kaip sukurti atsarginę kopiją ir atkurti PostgreSQL duomenų bazę


Gamybos aplinkoje, nesvarbu, kokia didelė ar maža būtų jūsų PostgreSQL duomenų bazė, reguliari atsarginė kopija yra esminis duomenų bazės valdymo aspektas. Šiame straipsnyje sužinosite, kaip sukurti atsarginę kopiją ir atkurti PostgreSQL duomenų bazę.

Manome, kad jau turite veikiantį PostgreSQL duomenų bazių sistemos diegimą. Jei ne, perskaitykite toliau pateiktus straipsnius, kad įdiegtumėte PostgreSQL savo Linux platinime.

Pradėkime…

Vienos PostgreSQL duomenų bazės atsarginė kopija

PostgreSQL teikia pg_dump priemonę, kuri padės kurti atsargines duomenų bazių kopijas. Jis generuoja duomenų bazės failą su SQL komandomis tokiu formatu, kurį bus galima lengvai atkurti ateityje.

Norėdami sukurti atsarginę PostgreSQL duomenų bazės kopiją, pirmiausia prisijunkite prie duomenų bazės serverio, tada perjunkite į Postgres vartotojo paskyrą ir paleiskite pg_dump, kaip nurodyta toliau. (pakeiskite tecmintdb duomenų bazės, kurios atsarginę kopiją norite sukurti, pavadinimu). Pagal numatytuosius nustatymus išvesties formatas yra paprasto teksto SQL scenarijaus failas.

pg_dump tecmintdb > tecmintdb.sql

pg_dump palaiko ir kitus išvesties formatus. Išvesties formatą galite nurodyti naudodami parinktį -F, kur c reiškia pasirinktinio formato archyvo failą, d reiškia katalogo formato archyvą ir t reiškia tar formato archyvo failą: visi formatai tinkami įvesti į pg_restore.

Pavyzdžiui:

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

Norėdami išvesti išvestį katalogo išvesties formatu, naudokite vėliavėlę -f (kuri naudojama nurodyti išvesties failą), kad nurodytumėte tikslinį katalogą, o ne failą. Katalogo, kurį sukurs pg_dump, neturi būti.

pg_dump -F d tecmintdb -f tecmintdumpdir	

Norėdami sukurti atsargines visų PostgreSQL duomenų bazių kopijas, naudokite įrankį pg_dumpall, kaip parodyta.

pg_dumpall > all_pg_dbs.sql

Galite atkurti iškeltą naudodami psql, kaip parodyta.

psql -f all_pg_dbs.sql postgres

PostgreSQL duomenų bazės atkūrimas

Norėdami atkurti PostgreSQL duomenų bazę, galite naudoti psql arba pg_restore paslaugų programas. psql naudojamas norint atkurti tekstinius failus, sukurtus naudojant pg_dump, o pg_restore naudojamas norint atkurti PostgreSQL duomenų bazę iš archyvo, sukurto naudojant pg_dump<. viename iš ne paprasto teksto formatų (priskirtas, tar arba katalogas).

Štai pavyzdys, kaip atkurti paprasto teksto failo išklotinę:

psql tecmintdb < tecmintdb.sql

Kaip minėta pirmiau, tinkinto formato išrašymas nėra psql scenarijus, todėl jį reikia atkurti naudojant pg_restore, kaip parodyta.

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

Suspausta PostgreSQL duomenų bazės atsarginė kopija

Jei duomenų bazė, kurios atsarginę kopiją kuriate, yra didelė ir norite sugeneruoti gana mažesnį išvesties failą, galite paleisti suglaudintą išvestį, kur turite filtruoti pg_dump išvestį naudodami glaudinimo įrankį, pvz., gzip. arba bet kuris jūsų mėgstamiausias:

pg_dump tecmintdb | gzip > tecmintdb.gz

Jei duomenų bazė yra labai didelė, galite iškelti lygiagrečiai, išmesdami darbų_skaičiaus lenteles vienu metu naudodami vėliavėlę -j, kaip parodyta.

pg_dump -F d -j 5 -f tecmintdumpdir

Svarbu pažymėti, kad lygiagrečios išrašymo parinktis sumažina išrašymo laiką, bet, kita vertus, padidina duomenų bazės serverio apkrovą.

Nuotolinių PostgreSQL duomenų bazių atsarginės kopijos

pg_dump yra įprastas PostgreSQL kliento įrankis, jis palaiko operacijas nuotoliniuose duomenų bazių serveriuose. Norėdami nurodyti nuotolinį duomenų bazės serverį pg_dump, su kuriuo turi susisiekti, naudokite komandų eilutės parinktis -h, kad nurodytumėte nuotolinį pagrindinį kompiuterį, o -p nurodo nuotolinį prievadas, kurio klauso duomenų bazės serveris. Be to, naudokite vėliavėlę -U, kad nurodytumėte duomenų bazės vaidmens pavadinimą, kuriuo norite prisijungti.

Nepamirškite pakeisti 10.10.20.10 ir 5432 bei tecmintdb atitinkamai nuotolinio prieglobos IP adresu arba prieglobos serverio pavadinimu, duomenų bazės prievadu ir duomenų bazės pavadinimu.

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

Įsitikinkite, kad nuotoliniu būdu jungiantis vartotojas turi reikiamas teises pasiekti duomenų bazę, o duomenų bazės serveryje sukonfigūruotas atitinkamas duomenų bazės autentifikavimo metodas, kitaip gausite tokią klaidą, kaip parodyta toliau esančioje ekrano kopijoje.

Taip pat galima perkelti duomenų bazę tiesiai iš vieno serverio į kitą, naudojant pg_dump ir psql priemones, kaip parodyta.

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

Automatinė PostgreSQL duomenų bazės atsarginė kopija naudojant „Cron Job“.

Naudodami cron užduotis galite reguliariai kurti atsargines kopijas. Cron užduotys yra dažniausiai naudojama priemonė įvairių rūšių užduočių planavimui serveryje vykdyti.

Galite sukonfigūruoti cron užduotį, kad automatizuotų PostgreSQL duomenų bazės atsarginę kopiją, kaip nurodyta toliau. Atminkite, kad turite paleisti šias komandas kaip „PostgreSQL“ supervartotoją:

mkdir -p /srv/backups/databases

Tada paleiskite šią komandą, norėdami redaguoti crontab ir pridėti naują cron užduotį.

crontab -e

Nukopijuokite ir įklijuokite šią eilutę crontab pabaigoje. Galite naudoti bet kurį iš aukščiau aprašytų iškelties formatų.

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

Išsaugokite failą ir išeikite.

„cron“ paslauga automatiškai pradės vykdyti šią naują užduotį nepaleidusi iš naujo. Ir šis cron darbas veiks kiekvieną dieną vidurnaktį, tai yra minimalus atsarginės užduoties sprendimas.

Norėdami gauti daugiau informacijos apie tai, kaip planuoti cron užduotis, žr.: Kaip sukurti ir valdyti Cron užduotis sistemoje Linux

Tai kol kas! Duomenų atsarginių kopijų kūrimą būtų naudinga padaryti savo duomenų bazių valdymo rutinos dalimi. Jei norite susisiekti su mumis, jei turite klausimų ar komentarų, naudokite toliau pateiktą atsiliepimų formą. Norėdami gauti daugiau informacijos, žr. pg_dump ir pg_restore nuorodų puslapius.