Pemulihan PITR PostgreSQL

9

Saya memiliki server PostgreSQL 9.1 yang berjalan pada OS CentOS 5.8 32bit dan saya telah mengaktifkan pengarsipan WAL. Di server ini, ada tiga database: databaseA, databaseB, dan databaseC. Seseorang menghapus tabel pada jam 12 siang di databaseB dan saya ingin mengembalikan databaseB sebelum waktu tabel itu dihapus. Sekarang pukul 3 sore.

Bagaimana saya bisa mengembalikan databaseB hingga jam 12 malam tanpa kehilangan data selama tiga jam di dua basis data lainnya?

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'

Saya menjalankan backup basis saya pada jam 9 pagi

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

Layanan PostgreSQL dimatikan pada jam 3 sore.

Craig Efrein
sumber

Jawaban:

6

Saya akan melakukan pemulihan titik waktu ke lokasi yang berbeda, mengembalikan ke waktu yang diinginkan, dan pg_dump database masalah. Saya akan menjatuhkan satu database di lokasi normal, membuatnya lagi, dan memuat output pg_dump.

Pastikan Anda membuat dan menyimpan salinan level sistem file dari pohon direktori data cluster sebelum Anda memulai hal seperti ini.

kgrittn
sumber
Terima kasih, +1 atas jawabannya. Bisakah Anda menambahkan langkah-langkah yang diperlukan untuk memulihkan ke lokasi yang berbeda dan kemudian memulihkan menggunakan pg_restore? Dengan jawaban Anda, saya berpikir untuk menggunakan lokasi cadangan dasar yang sebenarnya untuk melakukan PITR.
Craig Efrein
0

Untuk memperluas jawaban kgrittn, Anda juga dapat melakukan pg_dumphanya dari tabel yang dijatuhkan dan membangunnya kembali di database yang sudah adaB, jadi Anda tidak perlu kehilangan 6 jam data di tabel lain.

Aryeh Leib Taurog
sumber
terima kasih atas jawaban Anda, tetapi semua berbagai kendala dan hubungan antara tabel akan mencegah saya memulihkan hanya satu.
Craig Efrein