Crearea unei copii de rezervă a bazei de date PostgreSQL
Ideea din spatele metodei dump este de a genera un fișier text cu comenzi SQL care, atunci când sunt executate pe server, vor recrea baza de date în aceeași stare ca atunci când a fost creată memoria. PostgreSQL oferă un utilitar pg_dump în acest scop. Forma de bază a comenzii arată astfel:
Adică, pg_dump scrie rezultatele lucrărilor sale la ieșirea standard. Mai mult, vom analiza modul în care acest lucru poate fi utilizat.
pg_dump este pentru PostgreSQL o aplicație client obișnuită. Procedura de backup poate fi efectuată de la orice computer la distanță care are acces la baza de date necesară. Acest utilitar ar trebui să aibă acces la citirea tuturor tabelelor de baze de date pe care doriți să le creați, astfel încât, în practică, aproape întotdeauna trebuie să fie rulate cu drepturile superuserilor din DBMS.
Pentru a specifica ce server de pg_dump trebuie să vă conectați, trebuie să utilizați opțiunea de linie de comandă -h server și portul -p. În mod implicit, localhost sau serverul specificat în variabila de mediu PGHOST este selectat ca server. În mod similar, în mod implicit, este utilizat portul specificat în variabila de mediu PGPORT sau, dacă variabila nu este specificată, portul specificat implicit la compilare.
Ca orice altă aplicație client PostgreSQL, pg_dump se va conecta la baza de date în mod implicit, sub un utilizator al cărui nume se potrivește cu numele utilizatorului curent din sistemul de operare. Pentru a schimba utilizatorul, trebuie să utilizați opțiunea -U sau să setați valoarea dorită a variabilei de mediu PGUSER.
De asemenea, numai pg_dump este o metodă care va funcționa atunci când se transferă o bază de date într-o altă arhitectură a mașinii, de exemplu, când migrați de la o versiune pe 32 de biți la o versiune pe 64 de biți a serverului.
Gropile create de pg_dump sunt consecvente la nivel intern, ceea ce înseamnă că dump-ul este un instantaneu al bazei de date în momentul în care pg_dump a fost pornit. pg_dump nu blochează alte operații din baza de date în timpul funcționării.
În cazul în care schema bazei de date se bazează pe OID (cum ar fi cheile străine), trebuie să spui pg_dump, de asemenea, să-și arunce incluse OID. Pentru aceasta, utilizați opțiunea de linie de comandă -o.
Comanda pg_dump poate salva o copie de rezervă a bazei de date în două formate: în format de fișiere text care conțin un set de comenzi SQL și un format de memorie specială. Dacă PostgreSQL a fost compilat pe un sistem cu biblioteca zlib instalată, atunci formatul de memorie specială va comprima datele care sunt trimise către fișierul de ieșire. Acest lucru va duce la crearea unui fișier cu memorie care seamănă cu o memorie comprimată prin gzip, dar acest format va avea un avantaj deoarece permite recuperarea selectivă a tabelelor. Următoarea comandă elimină baza de date utilizând un format special de memorie:
În principiu, puteți comprima formatul de text al copiei de rezervă utilizând instrumentele standard Linux - utilizați programul de compresie, de exemplu gzip:
despachetarea dumpului comprimat cu următoarea comandă:
Cu baze de date mari și reticența de a folosi compresia, puteți folosi comanda split. Comanda split vă permite să împărțiți fișierele text în fișiere mai mici care nu se încadrează în limitele maxime de dimensiune a fișierelor din sistemul de fișiere. De exemplu, pentru a tăia dump în bucăți de 1 megabyte:
După încărcarea fișierelor primite cu comanda:
Refacerea copiilor de rezervă ale bazelor de date PostgreSQL
Fișierele text ale copiilor de siguranță ale bazei de date PostgreSQL care conțin comenzi sql sunt destinate citirii ulterioare de către programul psql, adică executarea secvenței de script generate. Vedere generală a comenzii pentru restabilirea dumpării:
unde dumpfile este fișierul care conține ieșirea comenzii pg_dump. Baza de date specificată de parametrul database_name nu va fi creată de această comandă, așa că trebuie mai întâi să fie creată din șablonul de șablon șablon înainte de a executa psql, de exemplu, folosind comanda:
psql acceptă opțiuni pentru specificarea serverului la care se face conexiunea și a unor nume de utilizator similare cu pg_dump.
Înainte de a restaura o memorie SQL, toți utilizatorii care dețin obiecte sau au drepturi asupra obiectelor din baza de date care fac obiectul unui dumping ar trebui să existe deja. Dacă acestea nu există, recuperarea va duce la erori în re-crearea obiectelor cu proprietarii originali și / sau drepturi.
În mod implicit, dacă apare o eroare SQL, programul psql va continua executarea acestuia. Puteți rula psql cu ON_ERROR_STOP set de variabile, pentru a face psql atunci când apariția eroare SQL pentru a finaliza lucrările cu codul 3:
În orice caz, baza de date va fi parțial restaurată. Alternativ, puteți cere ceva pentru întreaga groapa ar trebui să fie restaurată într-o singură tranzatsii, astfel încât recuperarea sau va fi pe deplin puse în aplicare sau nu este pe deplin pusă în aplicare. Acest mod poate fi specificat folosind opțiunile liniei de comandă -1 sau -un singură tranzacție pentru psql.
Gropile care fac pg_dump sunt relative la template0. Aceasta înseamnă că orice limbă, procedură etc. adăugat prin șablon1 va fi de asemenea descărcat când pg_dump este executat. Ca urmare, atunci când restaurarea, în cazul în care ați folosit-o template1 modificată în mod special, trebuie să creați o bază de date goală din template0, așa cum se arată în exemplul de mai sus.
După restaurarea copiei de rezervă, este recomandat să rulați ANALYZE pe fiecare bază de date pentru ca optimizatorul de interogări să obțină statisticile dorite.
Formatul de memorie specială nu este un script pentru psql și ar trebui restaurat folosind comanda pg_restore, de exemplu:
Pentru bazele de date foarte mari, este posibil să fie necesar să combinați divizarea cu una din celelalte două metode.
pg_dump găsește numai o singură bază de date și nu include informații despre roluri sau spații de tabelă în dump (deoarece aceste date se referă mai degrabă la nivelul clusterului decât la baza de date în sine). Pentru a crea o copie de rezervă a întregului conținut al clusterului de baze de date, există un program numit pg_dumpall. pg_dumpall face o copie de siguranță a fiecărei baze de date a clusterului, precum și date de serviciu la nivel de cluster, cum ar fi rolurile și definițiile spațiului tabelă. Forma de bază a acestei comenzi este:
Dumpul rezultat poate fi recuperat folosind psql:
Atunci când restaurați un depozit realizat de pg_dumpall, este întotdeauna necesar să efectuați o recuperare cu drepturile superuserilor din bazele de date, deoarece acestea sunt necesare pentru a restaura rolurile și informațiile despre spațiile de tabelă.
Subiecte conexe PostgreSQL