Sobes.tech
Middle

Kaip sukonfigūruotumėte atsarginių kopijų kūrimą PostgreSQL naudojant tik vidinius mechanizmus, be išorinių įrankių, tokių kaip vim?

sobes.tech AI

Atsakymas iš AI

Žinoma, esu pasiruošęs atsakyti į šį klausimą.

Norint sukurti PostgreSQL atsargines kopijas naudojant tik vidinius mechanizmus, aš taikyčiau šiuos požiūrius:

  1. pg_dump ir pg_dumpall:

    • pg_dump sukuria loginę atsarginę kopiją vieno duomenų bazės.
    • pg_dumpall sukuria loginę kopiją visų duomenų bazių, įskaitant sisteminius objektus (roles, schemas).
    • Jie sukuria tekstinį failą su SQL instrukcijomis atstatymui arba baitų archyvą.
    • Privalumas: paprastas naudojimas, lankstumas pasirinkti išvesties formatą.
    • Trūkumas: atstatymas iš loginės kopijos gali užtrukti ilgai didelėms duomenų bazėms. Netinka nuolatiniams atsarginiams kopijavimams (PITR).

    Pavyzdys naudojant pg_dump:

    # Loginės atsarginės kopijos kūrimas duomenų bazei 'mydatabase' paprasto teksto formatu:
    pg_dump mydatabase > mydatabase_backup.sql
    
    # Loginės kopijos kūrimas duomenų bazei 'mydatabase' su `-Fc` formatu:
    pg_dump -Fc mydatabase > mydatabase_backup.dump
    
    # Visų duomenų bazių loginės kopijos kūrimas:
    pg_dumpall > all_databases_backup.sql
    
  2. Nuolatinis archyvavimas (Continuous Archiving) ir Point-in-Time Recovery (PITR):

    • Apima parametrus wal_level, archive_mode ir archive_command faile postgresql.conf.
    • Leidžia kurti nuolatinį WAL failų srautą.
    • PITR reikalauja pagrindinės kopijos (pvz., pg_basebackup sukurta) ir WAL failų sekos.
    • Privalumas: galimybė atstatyti bet kuriuo metu, minimalus poveikis našumui archyvavimo metu.
    • Trūkumas: reikalauja daugiau konfigūracijos ir saugyklų valdymo WAL failams.

    Konfigūracijos pavyzdys postgresql.conf:

    # WAL archyvavimas
    wal_level = replica      # arba higher, reikalinga archyvavimui
    archive_mode = on        # įjungti WAL archyvavimo režimą
    archive_command = 'cp %p /path/to/wal_archive/%f'  # komanda WAL failų kopijavimui. Pakeiskite `/path/to/wal_archive/` į savo kelią.
    

    Pagrindinės kopijos kūrimo pavyzdys naudojant pg_basebackup:

    # Pagrindinės kopijos kūrimas kataloge `/path/to/base_backup`
    pg_basebackup -D /path/to/base_backup -F t -x -v
    
  3. Fizinės kopijos (File-level backup):

    • Duomenų failų kopijavimas tiesiogiai iš PGDATA katalogo.
    • Reikalauja PostgreSQL sustabdymo arba momentinių failų sistemos kopijų naudojimo.
    • Nerekomenduojama veikiančiai bazei be papildomų įrankių (pvz., LVM momentinių kopijų).
    • Privalumas: paprasta įgyvendinti mažoms duomenų bazėms sustabdžius serverį.
    • Trūkumas: reikia sustabdyti serverį, didelė duomenų sugadinimo rizika kopijuojant veikiančią sistemą be papildomų priemonių.

Norint užtikrinti patikimą ir efektyvią atsarginių kopijų strategiją, ypač „kovinėms“ sistemoms, rekomenduočiau naudoti pg_basebackup ir nuolatinį WAL archyvavimą, kad užtikrintumėte PITR. Tai leidžia atstatyti su minimaliais duomenų praradimais ir lankstiai pasirinkti atstatymo tašką. Loginės kopijos (pg_dump, pg_dumpall) gali būti naudojamos atskirų duomenų bazių atsarginių kopijų kūrimui arba duomenų perkėlimui, tačiau jos mažiau efektyvios visapusiškai DR (Disaster Recovery).

Automatizacijai, pavyzdžiui, naudojant cron, reikės užduočių planuoklio, tačiau pats kopijos kūrimo procesas bus vykdomas naudojant PostgreSQL vidines komandas.