PostgreSQL PITR กู้คืน


9

ฉันมีเซิร์ฟเวอร์ PostgreSQL 9.1 ที่ทำงานบน CentOS 5.8 32 บิต OS และฉันได้เปิดใช้งานการเก็บถาวร WAL แล้ว บนเซิร์ฟเวอร์นี้มีสามฐานข้อมูล: databaseA, databaseB และ databaseC มีคนลบตารางเวลา 12.00 น. ในฐานข้อมูล B และฉันต้องการคืนค่าฐานข้อมูล B ให้อยู่ก่อนเวลาที่ตารางจะถูกลบ เวลาในขณะนี้คือบ่ายสามโมง

ฉันจะกู้คืนฐานข้อมูล B ได้จนถึง 12.00 น. โดยไม่สูญเสียข้อมูลมูลค่าสามชั่วโมงไปยังอีกสองฐานข้อมูลได้อย่างไร

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:00

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

บริการ PostgreSQL ถูกปิดในเวลา 15.00 น.

คำตอบ:


6

ฉันจะทำการกู้คืนเวลาไปยังตำแหน่งอื่นโดยกู้คืนเวลาที่ต้องการและ pg_dump ฐานข้อมูลปัญหา ฉันจะวางฐานข้อมูลเดียวบนตำแหน่งปกติสร้างอีกครั้งและโหลดเอาต์พุต pg_dump

ตรวจสอบให้แน่ใจว่าคุณสร้างและบันทึกสำเนาระดับระบบไฟล์ของทรีไดเรกทอรีข้อมูลของคลัสเตอร์ก่อนที่คุณจะเริ่มอะไรเช่นนี้


ขอบคุณ +1 สำหรับคำตอบ คุณช่วยเพิ่มขั้นตอนที่จำเป็นในการกู้คืนไปยังตำแหน่งอื่นแล้วทำการกู้คืนโดยใช้ pg_restore ได้หรือไม่? ด้วยคำตอบของคุณฉันคิดว่าจะใช้ตำแหน่งสำรองพื้นฐานจริงเพื่อทำ PITR
Craig Efrein

0

หากต้องการขยายคำตอบของ kgrittn คุณสามารถทำได้pg_dumpเพียงหนึ่งตารางที่ถูกดร็อปและสร้างใหม่ในฐานข้อมูลที่มีอยู่B ดังนั้นคุณไม่จำเป็นต้องสูญเสียข้อมูล 6 ชั่วโมงในตารางอื่น


ขอบคุณสำหรับคำตอบของคุณ แต่ข้อ จำกัด และความสัมพันธ์ที่หลากหลายระหว่างตารางจะทำให้ฉันไม่สามารถกู้คืนได้
Craig Efrein
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.