ฉันได้ทำงานกับการสำรองข้อมูลที่ร้อนแรงสำหรับ Postgres 9.1 มานานแล้วและพบปัญหาที่สอดคล้องกัน หลังจากรีสตาร์ท Postgres บนเซิร์ฟเวอร์ทาสไฟล์บันทึก pgstartup และไฟล์บันทึกประจำวันภายใต้ไดเร็กทอรี pg_log จะอ่านโดยไม่มีข้อผิดพลาด อย่างไรก็ตามเมื่อฉันพยายามเข้าสู่ฐานข้อมูลโดยใช้คำสั่ง psql ฉันได้รับข้อผิดพลาด:
FATAL: ระบบฐานข้อมูลเริ่มต้นขึ้นแล้ว
ไฟล์ recovery.conf จะไม่หันไปใช้ recovery.done ฉันค้นคว้าข้อผิดพลาดนี้อย่างครอบคลุมและพบคำตอบเดียวกัน: ฐานข้อมูลยังไม่ได้ปิดอย่างสมบูรณ์ก่อนที่ฉันจะพยายามเริ่ม Postgres ใหม่ วิธีเดียวที่ฉันรีสตาร์ท Postgres คือผ่านservice postgresql-9.1 restart
หรือ/etc/init.d/postgresql-9.1 restart
คำสั่ง หลังจากฉันได้รับข้อผิดพลาดนี้ฉันจะฆ่ากระบวนการทั้งหมดและลองรีสตาร์ทฐานข้อมูลอีกครั้งและยังคงได้รับข้อผิดพลาดเดิมอีกครั้ง ฉันกำลังสูญเสียที่จะไปจากที่นี่และวิธีการแก้ไขปัญหานี้ ด้านล่างเป็นกระบวนการที่แน่นอนที่ฉันได้ทำเพื่อให้การสำรองข้อมูลเสร็จสมบูรณ์
การกำหนดค่าเซิร์ฟเวอร์หลัก:
pg_hba.conf เพิ่มบรรทัด:
การจำลองแบบโฮสต์ postgres เชื่อถือ IPAddressOfSlaveServer
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 Listen_address = '*' พอร์ต = 5432 max_wal_senders = 5 wal_keep_segments = 32
การกำหนดค่าเซิร์ฟเวอร์ Slave:
postgresql.conf:
hot_standby = เปิด
recovery.conf:
standby_mode = เปิด primary_conninfo = host = IPAddressOfMasterServer พอร์ต = 5432 user = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
หลังจากกำหนดค่าเซิร์ฟเวอร์ทั้งสอง
ฉันเปลี่ยนเป็นผู้ใช้ postgres บนเซิร์ฟเวอร์ต้นแบบและรันคำสั่ง:
psql -c "เลือก pg_start_backup ('ป้ายกำกับ', จริง);"; rsync -a -v -e ssh /var/lib/pgsql/9.1/data ทาส: /var/lib/pgsql/9.1/data \ - ยกเว้น postmaster.pid pgsql -c "select pg_stop_backup ();";
หลังจากซิงค์ฐานข้อมูลกับเซิร์ฟเวอร์ทาส
ฉันรีสตาร์ทเซิร์ฟเวอร์ทาสและการเริ่มต้นไม่ล้มเหลว pgstartup.log อ่าน:
ความสำเร็จ ตอนนี้คุณสามารถเริ่มเซิร์ฟเวอร์ฐานข้อมูลโดยใช้: /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data หรือ /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l logfile start
ไฟล์บันทึกวันปัจจุบัน postgresql-Thu.log อ่าน:
เข้าสู่ระบบ: ปิดตัวลง เข้าสู่ระบบ: ระบบฐานข้อมูลปิดตัวลง เข้าสู่ระบบ: ระบบฐานข้อมูลถูกปิดตัวลงในการกู้คืนที่ 2012-4-10 เข้าสู่ระบบ: เข้าสู่โหมดสแตนด์บาย บันทึก: ไฟล์บันทึกที่เรียกคืน "logFileName" จากไฟล์เก็บถาวร เข้าสู่ระบบ: สถานะการกู้คืนที่สอดคล้องถึง 0 / BF0000B0 บันทึก: ทำซ้ำเริ่มต้นที่ 0 / BF000020 บันทึก: ไฟล์บันทึกที่เรียกคืน "logFileName" จากไฟล์เก็บถาวร บันทึก: pageaddr ที่ไม่คาดคิด 0/85000000 ในล็อกไฟล์ 0, เซ็กเมนต์ 192, offset 0 บันทึก: pageaddr ที่ไม่คาดคิด 0/85000000 ในล็อกไฟล์ 0, เซ็กเมนต์ 192, offset 0 เข้าสู่ระบบ: การจำลองแบบสตรีมมิ่งเชื่อมต่อกับหลักเรียบร้อยแล้ว
ฉันค้นคว้า pageaddr ที่ไม่คาดคิดและจากคลังเก็บ postgres ฉันเข้าใจว่ามันค่อนข้างปกติและเป็นหนึ่งในวิธีที่คาดหวังในการตรวจหาจุดสิ้นสุดของ WAL
คำแนะนำใด ๆ ที่จะได้รับการชื่นชมอย่างมาก