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:
-
pg_dumpirpg_dumpall:pg_dumpsukuria loginę atsarginę kopiją vieno duomenų bazės.pg_dumpallsukuria 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 -
Nuolatinis archyvavimas (Continuous Archiving) ir Point-in-Time Recovery (PITR):
- Apima parametrus
wal_level,archive_modeirarchive_commandfailepostgresql.conf. - Leidžia kurti nuolatinį WAL failų srautą.
- PITR reikalauja pagrindinės kopijos (pvz.,
pg_basebackupsukurta) 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 - Apima parametrus
-
Fizinės kopijos (File-level backup):
- Duomenų failų kopijavimas tiesiogiai iš
PGDATAkatalogo. - 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ų.
- Duomenų failų kopijavimas tiesiogiai iš
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.