Відновлення PostgreSQL PITR


9

У мене є сервер PostgreSQL 9.1, який працює на CentOS 5.8 32-бітній ОС, і я ввімкнув WAL-архівування. На цьому сервері є три бази даних: databaseA, databaseB і databaseC. Хтось видаляє таблицю о 12 вечора в databaseB, і я хочу відновити databaseB до того часу, коли таблиця була видалена. Час зараз 3 вечора.

Як я можу просто відновити базу данихB до 12 вечора, не втрачаючи даних три години на двох інших базах даних?

postgresql.conf

wal_level = archive             
archive_mode = on               
archive_command = 'test ! -f /opt/pgsql/logs/%f && cp %p /opt/pgsql/logs/%f'
max_wal_senders = 100

recovery.conf

restore_command = 'cp /opt/pgsql/logs/%f %p'
recovery_target_time = '2012-06-29 11:59:59 CEST'

Я запустив свою базову резервну копію о 9 ранку

pg_basebackup -h 127.0.0.1 -D /opt/pgsql/backup

Служба PostgreSQL була вимкнена о 15 годині вечора.

Відповіді:


6

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

Переконайтесь, що ви зробите та збережете копію файлової системи дерева дерев каталогів кластера, перш ніж починати щось подібне.


Дякую, +1 за відповідь. Чи можете ви, будь ласка, додати кроки, необхідні для відновлення до іншого місця, а потім відновити за допомогою pg_restore? З вашою відповіддю я думаю використовувати фактичне місце резервного копіювання, щоб зробити PITR.
Крейг Ефрейн

0

Щоб розширити відповідь на kgrittn, ви також можете зробити pg_dumpлише таблицю, яку випали, і відновити її в існуючій базі данихB , тому вам не потрібно втрачати 6 годин даних в інших таблицях.


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