Як робити додаткове резервне копіювання щогодини в Postgres?


18

Спроба зробити погодинну поступову резервну копію одного сервера Postgres (Win7 64).

У мене є така настройка postgresql.conf:

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

(перезапуск)

Я робив резервне резервне копіювання за допомогою pg_basebackup -U postgres -D ..\foo -F t -x

Який base.tarфайл створив великий fooпапку і додав 16,384 КБ файлів, які я вважаю WAL.

Те, що я не розумію, - це те, чому WAL в fooне змінюються . WALs data/pg_xlogзмінюються. Чи pg не повинен копіювати їх? Як він вирішує це зробити?

Можливо, мені потрібно встановити archive_timeout=3600?

Я бачив декілька сайтів (списки розсилки pg, сторінку поштових повідомлень bacula), де сказано, що вам потрібно зателефонувати pg_start_backup () та pg_stop_backup (), але я вважаю, що вони не потрібні. Це правда?

Вторинні питання:

  1. Як часто записуються ВАЛ data/pg_xlog? Що запускає запис?

    Здається, оновити WAL, якщо я буду робити деякі DML, то \qв psql. Або відредагуйте таблицю в pgAdmin та закрийте вікно. Я подумав, що це буде писати на фіксації.

  2. Кращі практики? pg_basebackup раз на тиждень? Архів WAL-файлів на тій же машині, що і PG, або віддаленій машині?

Відповіді:


5

Ви хочете зробити додаткове резервне копіювання папки архіву на віддаленому сховищі.

Якщо вам потрібно буде відновити з резервної копії, основним сценарієм є те, що вам потрібна ваша базова резервна копія в якості вихідної точки і весь вміст папки архіву для відтворення трансакційної діяльності, яка відбулася між початковою точкою та збоєм.

Також, щоб уникнути назавжди накопичення файлів у папці архіву, потрібно час від часу робити нову резервну копію бази та видаляти файли, заархівовані перед новою базовою резервною копією.


Спасибі. Кілька питань: 1. Чи робити pg_start_backup (), копіювати дані, а потім запускати pg_stop_backup () або pg_start_backup (); pg_stop_backup (), а потім скопіювати?
Ніл Макгуйган

@Neil: 1. і 2. не застосовуються, коли ви користуєтесь pg_basebackup, він уже береться за це. 3. Постгреси автоматично видалять файли WAL, pg_logколи вони більше не потрібні. Ви не повинні робити нічого вручну pg_log. В іншому випадку дивіться wal_keep_segmentsпараметр
Daniel Vérité

під папкою "архів" ви маєте на увазі pg_xlog, так?
Ніл МакГуйган

@NeilMcGuigan: зовсім не так. Папка архіву - це папка призначення вашої команди архіву, наприклад, тут "c: \ postgres \ foo". pg_xlogповністю керується автоматично postgres, тоді як папка архіву повністю управляється DBA.
Даніель Верете

Напевно, я розгублений, тому що WAL в foo ніколи не змінюються після початкового pg_basebackup
Ніл

8

Є існуючий інструмент, який дуже допоможе вам, WAL-E . Він забезпечує archive_commandі restore_commandдля PITR до S3.

Там немає жодної команди , щоб зробити інкрементні або диференціальні логічні копії. pg_dumpне може приймати збільшення або диференціювання. Єдиний спосіб зробити це через архівування журналів.

Теоретично ви можете взяти нову повну резервну копію, зробити двійкову різницю між нею та останньою резервною копією та завантажити файл diff. Це вражає мене як тендітний і неефективний спосіб робити речі, і я дійсно не рекомендував би це.

Крім того, PgBarman підтримує інтеграцію з S3 за допомогою скриптів для гаків і автоматично автоматизує велику частину обертання та управління резервними копіями для вас. Знову ж, це не може бути варіантом для Windows.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.