PostgreSQL จัดการกับจุดตรวจระหว่างการสำรองข้อมูลที่เปิดใช้งาน WAL ได้อย่างไร


17

บน PostgreSQL v9.0 ฉันเป็นระบบเก็บถาวร WAL ที่ใช้งานได้ ดังนั้นไฟล์ WAL จะถูกเก็บถาวรตามกฎเกณฑ์ (เมื่อมีการสร้าง 3 WAL หรือหาก WAL มีอายุมากกว่า 15 นาที)

ตอนนี้ฉันเพิ่มไบนารีแพคเกจของไดเรกทอรี PG_DATA (ยกเว้นไดเรกทอรีย่อย pg_xlog) ต้องการทำเช่นนั้นฉันทำสำเนาไบนารีและpg_start_backup(),pg_stop_backup()

ฉันคิดว่าฉันเข้าใจค่อนข้างดีว่าสิ่งที่ pg_start_backup และ pg_stop_backup กำลังทำอยู่คนแรกสร้างจุดตรวจและคนสุดท้ายทำให้แน่ใจว่าไฟล์ WAL สุดท้ายถูกเก็บถาวร

จากเอกสารอย่างเป็นทางการเราจะเห็นว่าสำหรับการคัดลอกข้อมูลไบนารีเราควร:

ดำเนินการสำรองข้อมูลโดยใช้เครื่องมือระบบไฟล์สำรองที่สะดวกสบายเช่น tar หรือ cpio (ไม่ใช่ pg_dump หรือ pg_dumpall) ไม่จำเป็นหรือไม่ต้องการหยุดการทำงานปกติของฐานข้อมูลในขณะที่คุณทำเช่นนี้

ดังนั้นฉันค่อนข้างงุนงง นี่หมายความว่าสามารถดำเนินการจุดตรวจได้ในขณะที่เราทำสำเนา ฉันเห็นเอกสารจำนวนมากที่ระบุว่าคำสั่งคัดลอกควรอนุญาตให้มีการเปลี่ยนแปลงข้อมูลในขณะที่ทำการคัดลอกฉันก็โอเคกับเรื่องนี้เพียงแค่หาเครื่องมือที่เหมาะสม แต่คำถามของฉันคือวิธีที่ postgreSQL จะจัดการการกู้คืนด้วยเนื้อหา pg_data ที่มีไฟล์บางไฟล์ที่ไม่สอดคล้องกัน (บางไฟล์มาจากจุดตรวจก่อนหน้า, บางหลังมาจากไหน)?

โดยการเล่นซ้ำบันทึกธุรกรรม Postgresql จะสามารถทำให้ไฟล์เหล่านี้อยู่ในสถานะที่ถูกต้องได้หรือไม่ ฉันเห็นว่าการสร้างตารางและการดำเนินการวางเป็นอันตรายในขณะที่ทำการสำรองข้อมูลมีการดำเนินการที่เป็นอันตรายเช่นคำสั่งสูญญากาศหรือไม่ pg_backup หยุดการทำงานของสูญญากาศชั่วคราวหรือไม่ ฉันควรทำสำเนาของไฟล์ global / pg_control ในตอนท้ายของตอนเริ่มกระบวนการคัดลอกไบนารี่หรือไม่? ฉันควรใช้ระบบไฟล์ที่เปิดใช้งาน snapshot (เช่นเดียวกับ xfs-freeze) เพื่อให้กระบวนการกู้คืนเร็วขึ้นหรือไม่

ฉันเห็นว่าการสำรองสคริปต์ผิดพลาดจะไม่เปิด pg_stop_backup โดยอัตโนมัติดังนั้นจึงมีโอกาสที่สถานะการสำรองข้อมูลของฉันจะใช้งานได้เป็นเวลานาน (จนกระทั่ง nagios ของฉันส่งเสียงเรียกคนที่ใดที่หนึ่งเพื่อแก้ไข ดังนั้นหากมีอะไรที่แตกต่างใน PostgreSQL ระหว่างสอง comands ฉันอยากจะรู้เพื่อทำความเข้าใจว่ามันอาจมีผลกระทบอะไร

โปรดบอกฉันที

คำตอบ:


7

คุณถาม:

วิธีที่ postgreSQL จะจัดการการกู้คืนด้วยเนื้อหา pg_data ที่มีไฟล์บางไฟล์ที่ไม่สอดคล้องกัน

pg_start_backup()ตรวจสอบให้แน่ใจว่าไฟล์ข้อมูลนั้นใหม่อย่างน้อยเท่ากับด่าน ในการกู้คืนบันทึกจะถูกนำไปใช้

หากข้อมูลเก่าบันทึกจะอัปเดต ..

หากข้อมูลใหม่บันทึกจะมีเนื้อหาเหมือนกัน ไม่มีความเจ็บปวดเขียนมันอีกครั้ง

ข้อมูลจะไม่ใหม่กว่าจากนั้นบันทึกเพราะบันทึกจะถูกเขียนล่วงหน้า (WAL)


คุณถาม:

... xfs-freeze...

xfs-freezeเหมือนกันกับpg_start_backup()มันไม่ถ่ายภาพ คุณต้องมีเครื่องมือจัดการระดับเสียงเพื่อทำเช่นนั้น


คุณถาม:

... ทำไมสร้าง tablespace และสร้างคำสั่งฐานข้อมูลไม่ได้รับการสนับสนุนถ้า WAL สามารถเล่นซ้ำได้ทุกอย่าง

ได้รับการสนับสนุนเพียงแค่ gotcha เล็กน้อย ดูhttp://www.postgresql.org/docs/8.1/static/backup-online.html :

23.3.5 คำเตือน

คำสั่ง CREATE TABLESPACE ถูกบันทึก WAL ด้วยเส้นทางสัมบูรณ์ตามตัวอักษรและจะถูกเล่นซ้ำเป็นการสร้างพื้นที่ตารางที่มีเส้นทางสัมบูรณ์เดียวกัน สิ่งนี้อาจไม่พึงประสงค์หากบันทึกซ้ำในเครื่องอื่น อาจเป็นอันตรายได้แม้ว่าบันทึกจะถูกเล่นซ้ำบนเครื่องเดียวกัน แต่ลงในไดเรกทอรีข้อมูลใหม่: การเล่นซ้ำจะยังคงเขียนทับเนื้อหาของพื้นที่ตารางต้นฉบับ เพื่อหลีกเลี่ยง gotchas ที่อาจเกิดขึ้นของการเรียงลำดับนี้วิธีที่ดีที่สุดคือการสำรองฐานใหม่หลังจากสร้างหรือวางพื้นที่ตาราง


เกี่ยวกับ xfs-freeze ฉันรู้ว่าสิ่งนี้ขึ้นอยู่กับตัวจัดการไดรฟ์ข้อมูลมันเป็นเพียงส่วนหนึ่งของขั้นตอนการถ่ายภาพ แต่เราแน่ใจหรือไม่ว่าการกู้คืน WAL จะจัดการการเล่นซ้ำของบันทึกตารางก่อนสูญญากาศที่ดีในตารางไบนารีแบบโพสต์สุญญากาศ และเนื้อหาของ global / pg_control สำคัญหรือไม่ เหตุใดจึงสร้างคำสั่ง tablespace & สร้างคำสั่งฐานข้อมูลไม่ได้รับการสนับสนุนถ้า WAL สามารถเล่นซ้ำได้ทุกอย่าง
regilero

CREATE TABLESPACEโรงงาน ดูคำตอบที่อัปเดต ฉันไม่แน่ใจVACUUMแต่ฉันไม่สามารถจินตนาการได้ว่าทำไมถึงไม่ได้
J-16 SDiZ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.