การรัน pg_dump บน live db สร้างการสำรองข้อมูลที่สอดคล้องหรือไม่?


37

ฉันมีฐานข้อมูล 3GB ที่ได้รับการแก้ไขอย่างต่อเนื่องและฉันจำเป็นต้องทำการสำรองข้อมูลโดยไม่ต้องหยุดเซิร์ฟเวอร์ (Postgres 8.3)

pg_dump ของฉันทำงาน 5 นาที เกิดอะไรขึ้นถ้าข้อมูลถูกแก้ไขระหว่างกระบวนการ? ฉันจะได้รับการสำรองข้อมูลที่สอดคล้องกันหรือไม่ ฉันไม่ต้องการทราบเมื่อเกิดภัยพิบัติ

Postpost เอกสารhttp://www.postgresql.org/docs/8.3/static/app-pgdump.htmlไม่ได้พูดอะไรเกี่ยวกับเรื่องนี้


4
สวัสดีร็อดดิก ฉันขอแนะนำให้ทดสอบกระบวนการกู้คืนของคุณก่อนที่จะเกิดภัยพิบัติ ตั้งค่าเครื่องอื่นและคืนค่าโดยใช้หนึ่งในข้อมูลสำรองของคุณเพื่อทดสอบ
Derek Downey

คำตอบ:


53

จากคู่มือ :

มันทำให้การสำรองข้อมูลที่สอดคล้องกันแม้ว่าฐานข้อมูลจะถูกใช้พร้อมกัน

ใช่คุณสามารถเชื่อถือข้อมูลสำรองได้ แน่นอนมันคือ PostgreSQL คุณสามารถเชื่อถือข้อมูลของคุณใน PostgreSQL ได้


10
แท้จริงฉัน LOL'd เมื่อฉันอ่าน "คุณสามารถไว้วางใจข้อมูลของคุณใน PostgreSQL" :)
François Beausoleil

ลิงก์ไปยังคู่มือจะดี
Pablo Fernandez

1
@PabloFernandez: เสร็จแล้ว!
Frank Heikens

1
อย่างไรก็ตามการสำรองข้อมูลแบบลอจิคัลบนฐานข้อมูลสดจะล็อคตารางของคุณอย่าพลาดข้อมูลนี้ บางทีคุณอาจจะได้พบกับเคล็ดลับ: compose.com/articles/...
Tryp

ดังนั้นโปรดตลกเกี่ยวกับสิ่งนั้นคืออะไร? ฉันควรหยุดใช้ postgresql หรือไม่
777Anon

12

pg_dump เริ่มต้นธุรกรรมเช่นเดียวกับที่เคียวรีที่รันเป็นเวลานานอื่น ๆ จะทำงานได้ รับประกันความสอดคล้องมีที่มาจากการดำเนินงาน MVCC การถ่ายโอนข้อมูลจะสอดคล้องกับตัวเองเสมอในกฎเหล่านั้น

ส่วนที่คลุมเครือทั้งหมดของ MVCC อยู่รอบ ๆ สิ่งต่าง ๆ เช่นสิ่งที่ลูกค้าสามารถสั่งซื้อธุรกรรม UPDATE ได้และวิธีการล็อค pg_dump เข้มงวดเกี่ยวกับการสั่งซื้อและรับล็อกการอ่านบนฐานข้อมูลทั้งหมดเพื่อดัมพ์ สำหรับคนส่วนใหญ่นั่นคือสิ่งที่พวกเขาคาดหวังและกลไกที่ใช้ไม่เคยทำให้เกิดปัญหาใด ๆ ความเสี่ยงที่เกิดขึ้นพร้อมกันหลักคือลูกค้าที่พยายามเปลี่ยนโครงสร้างฐานข้อมูลจะถูกบล็อกในขณะที่การถ่ายโอนข้อมูลกำลังทำงานอยู่ ที่ไม่ส่งผลกระทบต่อคุณภาพของการถ่ายโอนข้อมูลแม้ว่า


11

TRANSACTION ISOLATION LEVEL SERIALIZABLEถ่ายโอนข้อมูลเริ่มต้นด้วยการตั้งค่า

โปรดอ่านคู่มือในการแยกการทำธุรกรรม และตัวอย่าง การอภิปรายรายชื่อผู้ใช้เกี่ยวกับเรื่องนี้

อ้างถึง:

การสำรองข้อมูลจะเห็นการทำธุรกรรมที่ได้กระทำก่อนที่จะมีการตั้งค่าระดับการแยก

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

การดำเนินการอ่าน / เขียนจะไม่ได้รับผลกระทบ (ล็อค) ในช่วงเวลานั้น


-1

ก่อนอื่นขออภัยที่ตอบกระทู้เก่านี้ แต่จากประสบการณ์ของฉันฉันไม่สามารถยืนยันคำสั่งที่คุณเชื่อถือได้ pg_dump /

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

ดังนั้นฉันยังคงมองหาวิธีแก้ไข แต่อย่างที่ฉันบอกว่าฉันไม่เห็นด้วยกับข้อความที่คุณเชื่อถือได้ pg_dump


หากสิ่งนั้นเกิดขึ้นมันจะร้ายแรงใน pg_dump รุ่นที่คุณใช้อยู่ คำถามของฉันคือ 3 ปีที่ผ่านมาและตอนนี้ฉันอยู่ใน 9.3 และ Amazon แดงซึ่งทำการสำรองข้อมูลสดโดยใช้ pg_dump พวกเขาไม่สามารถผิดได้
โรมัน

คุณสามารถเชื่อถือ pg_dump เพื่อทำการสำรองข้อมูลแบบอนุกรม (ดูคำตอบของฉันสำหรับลิงก์ / เอกสารและรายละเอียดเล็กน้อย) อย่างไรก็ตามในระหว่างการอ่านของฉันฉันได้อ่านว่าคุณไม่ควรเปลี่ยนโครงสร้างของฐานข้อมูลเองแม้ว่าฉันจะไม่สามารถขุดลึกลงไป . เนื่องจากเราทำการแทรก / อัพเดต / ลบเท่านั้นฉันไม่สามารถแสดงความคิดเห็นในการสร้างตาราง สำหรับเราฉันแน่ใจว่าจะไม่สร้างตารางในช่วงเวลา pg_dump
Dennis Nolte

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