Jak wykonywać przyrostowe kopie zapasowe co godzinę w Postgres?

18

Próba zrobienia co godzinę przyrostowej kopii zapasowej pojedynczego serwera Postgres (Win7 64).

Mam następującą konfigurację w postgresql.conf:

max_wal_senders = 2
wal_level       = archive
archive_mode    = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'

(uruchom ponownie)

Zrobiłem kopię zapasową z pg_basebackup -U postgres -D ..\foo -F t -x

Który utworzył duży base.tarplik w foofolderze i dodał około 16 384 KB plików, które, jak zakładam, to WAL.

Nie rozumiem, dlaczego WALs foosię nie zmieniają . Zmiany WALs data/pg_xlog. Czy pg nie powinno ich kopiować? Jak się na to decyduje?

Być może muszę ustawić archive_timeout=3600?

Widziałem kilka stron (listy mailingowe pg, strona postgres Bacoli), które mówią, że musisz wywołać pg_start_backup () i pg_stop_backup (), ale uważam, że nie są one wymagane. Czy to prawda?

Wtórne pytania:

  1. Jak często data/pg_xlognapisane są WAL ? Co powoduje zapis?

    Wydaje się aktualizować WAL, jeśli zrobię trochę DML, a następnie \qw psql. Lub edytuj tabelę w pgAdmin, a następnie zamknij okno. Pomyślałem, że napiszę przy zatwierdzeniu.

  2. Najlepsze praktyki? pg_basebackup raz w tygodniu? Zarchiwizować WAL na tym samym komputerze co PG lub na komputerze zdalnym?

Neil McGuigan
źródło

Odpowiedzi:

5

Chcesz wykonać przyrostową kopię zapasową folderu archiwum w magazynie zdalnym.

W przypadku konieczności przywrócenia z kopii zapasowej podstawowym scenariuszem jest potrzeba podstawowej kopii zapasowej jako punktu początkowego i całej zawartości folderu archiwum do odtworzenia czynności transakcyjnej między punktem początkowym a awarią.

Aby uniknąć gromadzenia plików w folderze archiwum na zawsze, od czasu do czasu należy wykonać nową podstawową kopię zapasową i usunąć pliki zarchiwizowane przed nową podstawową kopią zapasową.

Daniel Vérité
źródło
Dzięki. Kilka pytań: 1. Czy robię pg_start_backup (), kopiuję dane, a następnie uruchamiam pg_stop_backup () lub pg_start_backup (); pg_stop_backup (), a następnie skopiować?
Neil McGuigan
@Neil: 1. i 2. nie mają zastosowania pg_basebackup, gdy już korzystasz , już to załatwia. 3. Postgres automatycznie usunie pliki WAL, pg_loggdy nie będą już potrzebne. Nie powinieneś nic robić ręcznie pg_log. W przeciwnym razie zobacz wal_keep_segmentsparametr
Daniel Vérité
przez folder „archiwum” masz na myśli pg_xlog, tak?
Neil McGuigan
@NeilMcGuigan: wcale. Folder archiwum jest folderem docelowym polecenia archiwizacji, na przykład tutaj „c: \ postgres \ foo”. pg_xlogjest całkowicie zarządzany automatycznie przez postgres, natomiast folder archiwum jest całkowicie zarządzany przez DBA.
Daniel Vérité
Chyba jestem zdezorientowany, ponieważ WAL w Foo nigdy się nie zmieniają po początkowym pg_basebackup
Neil McGuigan
8

Istnieje narzędzie, które bardzo Ci pomoże, WAL-E . Zapewnia archive_commandi restore_commanddla PITR do S3.

Nie ma poleceń wykonywania przyrostowych ani różnicowych kopii logicznych. pg_dumpnie może przyjmować przyrostowego ani różnicowego. Jedynym sposobem na to jest archiwizacja dzienników.

Teoretycznie możesz zrobić nową pełną kopię zapasową, zrobić różnicę binarną między nią a ostatnią kopią zapasową i przesłać różnicę. Uderza mnie to jako kruchy i nieefektywny sposób robienia rzeczy i naprawdę nie polecałbym tego.

Ponadto PgBarman obsługuje integrację z S3 za pomocą skryptów przechwytujących i zautomatyzuje znaczną część rotacji i zarządzania kopiami zapasowymi. Ponownie, może to nie być opcja w systemie Windows.

Craig Ringer
źródło