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.