วิธีการทำให้การสำรองและทดสอบ PostgreSQL DB ทำงานและเสร็จสมบูรณ์


45

ฉันหวังว่าฉันจะได้รับคำตอบที่ชัดเจนเกี่ยวกับวิธีการสำรองข้อมูลแบบเต็มของ Postgres เหมือนกับที่คุณใช้กับ MS SQL Server จากนั้นดูแลผู้ใช้ที่ไม่ได้ใช้งาน

จากสิ่งที่ฉันได้อ่านและอาจผิดการค้นหาบล็อก PostgreSQL ที่ดีนั้นท้าทายมากดังนั้นโปรดแนะนำฉันให้ฉันฉันต้องหาวิธีที่แอพนี้ทำงานได้ดังนั้นฉันจึงสามารถไว้วางใจในการสำรองและ Slony ของฉัน การทำซ้ำ ฉันมีนักพัฒนากู้คืนการสำรองข้อมูลที่ฉันใช้จาก PgadminIII ผ่านcustom,, directoryและการจัดtarรูปแบบขณะที่เลือกOIDs แต่เขาบอกว่าสองคนไม่โหลด, tarทำ แต่มันเป็นเพียงไดเรกทอรีเท่านั้นไม่ใช่ข้อมูล ตอนนี้ฉันสับสนจริงๆ

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

pg_dumpallเห็นได้ชัดว่ามี-globalsตัวเลือกที่ควรสำรองข้อมูลทุกอย่าง แต่ความช่วยเหลือในการpg_dumpallแสดง-g, --globals-only dump only global objects, no databasesไม่ใช่--globalsตัวเลือก

ฉันคิดว่าpg_dumpallอย่างน้อยก็จะต้องทำการสำรองกุญแจต่างประเทศ แต่ถึงอย่างนั้นก็ดูเหมือนจะเป็น 'ตัวเลือก' ตามเอกสารประกอบแม้ว่าpg_dumpallฉันจะต้องใช้-oตัวเลือกในการสำรองคีย์ต่างประเทศฉันไม่สามารถจินตนาการได้เลยว่าเมื่อใดที่ฉันไม่ต้องการสำรองคีย์ต่างประเทศ

  1. ฉันจะดูแลผู้ใช้ที่กำพร้าและตรวจสอบว่าฉันมีทุกอย่างได้อย่างไร ฉันต้องการกู้คืนไฟล์สำรองของฉันจริงบนเซิร์ฟเวอร์อื่นและตรวจสอบทุกอย่างทำงาน หากใครมีข้อเสนอแนะเกี่ยวกับวิธีการสำรองข้อมูลจริงใน PostgreSQL และคืนค่าฉันจะขอบคุณมาก

ฉันมีเซิร์ฟเวอร์ PostgreSQL แต่ฉันก็ยังไม่เข้าใจว่าทำไมแอปจะไม่ทำการสำรองข้อมูลOIDโดยค่าเริ่มต้น! ดูเหมือนว่า 99.9% ของเวลาที่คุณต้องการ

อัปเดต 1:

เอกสารประกอบของ Postgres ระบุว่าglobalsตัวเลือกที่ฉันค้นหาดูเหมือนจะเป็นตัวเลือกเริ่มต้นสำหรับรุ่นนี้ แต่ก็ยังต้องการ-oตัวเลือกอยู่ หากใครบางคนสามารถตรวจสอบหรือให้คำสั่งตัวอย่างให้ฉันเพื่อกู้คืนฐานข้อมูลเดียวที่อื่นที่มีทุกสิ่งที่ฉันต้องการ

แก้ไข: ไซต์ถูกขอให้แสดงความเป็นเอกลักษณ์ของคำถามนี้โดยแก้ไขคำถามของฉัน คำถามนี้ทำให้เกิดปัญหาและรับความชัดเจนเกี่ยวกับ OID ในการสำรองข้อมูลความแตกต่างระหว่าง globals และไม่ใช่ globals รวมถึงการทดสอบคืนค่าคำแนะนำเพื่อให้แน่ใจว่าการสำรองข้อมูลนั้นดีเมื่อเทียบกับการสำรองข้อมูล เนื่องจากคำตอบที่ฉันสามารถสำรองข้อมูลคิดออก globals / oids และเริ่มกระบวนการทดสอบคืนค่าทุกคืนใน Postgres โดยใช้งาน cron ขอบคุณสำหรับความช่วยเหลือ!


คำตอบ:


58

คุณสามารถดัมพ์คลัสเตอร์ PostgreSQL ทั้งหมดด้วย pg_dumpall นั่นคือทั้งหมดที่ฐานข้อมูลและ Globals ทั้งหมดสำหรับกลุ่มเดียว จากบรรทัดคำสั่งบนเซิร์ฟเวอร์ฉันจะทำสิ่งนี้ (การฟังของฉันที่พอร์ต 5433 ไม่ใช่พอร์ตเริ่มต้น) คุณอาจต้องการหรือไม่ต้องการตัวเลือก

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

ซึ่งรวมถึง globals - ข้อมูลเกี่ยวกับผู้ใช้และกลุ่มพื้นที่ตารางและอื่น ๆ

ถ้าฉันจะสำรองฐานข้อมูลเดียวและย้ายไปยังเซิร์ฟเวอร์ scratchฉันจะถ่ายโอนฐานข้อมูลด้วย pg_dump และทิ้ง globals ด้วยเช่นกัน

  • pg_dumpall --globals-only, หรือ
  • pg_dumpall --roles-only (ถ้าคุณต้องการเพียงบทบาท)

แบบนี้.

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

ผลลัพธ์เป็นเพียงไฟล์ข้อความ

หลังจากคุณย้ายไฟล์เหล่านี้ไปยังเซิร์ฟเวอร์อื่นให้โหลด globals ก่อนจากนั้นจึงถ่ายโอนฐานข้อมูล

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

ฉันคิดว่าอย่างน้อย pg_dumpall จะสำรองคีย์ต่างประเทศ แต่ถึงอย่างนั้นก็ดูเหมือนจะเป็น 'ตัวเลือก' ตามที่: http://www.postgresql.org/docs/9.1/static/app-pg-dumpall.htmlแม้กับ pg_dumpall ฉันต้องใช้ตัวเลือก -o เพื่อสำรองคีย์ต่างประเทศ

ไม่การอ้างอิงนั้นบอกว่า "ใช้ตัวเลือกนี้หากแอปพลิเคชันของคุณอ้างอิงคอลัมน์ OID ด้วยวิธีใดวิธีหนึ่ง (เช่นในข้อ จำกัด คีย์ต่างประเทศ) มิฉะนั้นไม่ควรใช้ตัวเลือกนี้" (เน้นโดยเพิ่ม) ฉันคิดว่าไม่น่าเป็นไปได้ที่แอปพลิเคชันของคุณอ้างอิงคอลัมน์ OID คุณไม่จำเป็นต้องใช้ตัวเลือกนี้เพื่อ "สำรองคีย์ต่างประเทศ" (อ่านไฟล์ดัมพ์ในเอดิเตอร์หรือวิวเวอร์ไฟล์ของคุณ)


3
ชื่อฐานข้อมูลหายไปจากบรรทัดที่นำเข้า sandbox.sql หรือไม่ psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
SebK

มันเห็นว่าpg_dumpall9.5 รุ่นไม่ทำงานอย่างถูกต้องกับค่าเมื่อใช้NULL COPYฉันได้รับข้อผิดพลาดมากมายเช่นนี้: psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.เมื่อนำเข้ากลับสู่ Postgres 10 โดยใช้psql -f /tmp/dumpall.sql
piotrekkr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.