PostgreSQL PITR geri yükleme


9

CentOS 5.8 32bit işletim sisteminde çalışan bir PostgreSQL 9.1 sunucum var ve WAL arşivlemeyi etkinleştirdim. Bu sunucuda üç veritabanı vardır: databaseA, databaseB ve databaseC. Birisi databaseB üzerinde 12 de bir tablo siler ve ben tablonun silindiği zaman hemen önce databaseB geri yüklemek istiyorum. Zaman şu an 3 am.

DatabaseB'yi diğer iki veritabanında üç saatlik veri kaybetmeden 12: 00'a kadar nasıl geri yükleyebilirim?

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'

Temel yedeklememi sabah 9'da çalıştırdım

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

PostgreSQL servisi 15: 00'da kapatıldı.

Yanıtlar:


6

Farklı bir konuma zaman kurtarma bir noktada yapmak, istenen zamana geri yükleme ve pg_dump sorun veritabanı. Bir veritabanını normal konuma bırakır, yeniden oluşturur ve pg_dump çıktısını yüklerim.

Böyle bir şeye başlamadan önce, kümenin veri dizini ağacının dosya sistemi düzeyinde bir kopyasını oluşturduğunuzdan ve kaydettiğinizden emin olun.


Teşekkür ederim, cevap için +1. Lütfen farklı bir konuma kurtarmak ve ardından pg_restore kullanarak geri yüklemek için gerekli adımları ekler misiniz? Cevabınızla, PITR'yi yapmak için gerçek temel yedekleme konumunu kullanmayı düşünüyorum.
Craig Efrein

0

Kgrittn'in cevabını genişletmek için pg_dump, sadece bırakılan tablodan birini yapabilir ve mevcut veritabanındaB yeniden oluşturabilirsiniz, böylece diğer tablolarda 6 saat veri kaybetmenize gerek yoktur.


Cevabınız için teşekkür ederim, ancak tablolar arasındaki çeşitli kısıtlamalar ve ilişkiler sadece bir tanesini geri yüklememi engeller.
Craig Efrein
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.