PostgreSQL / المتقدم: الأدلة والتشغيل الموثوق / الدرس 16
النسخ والاستعادة والتعافي إلى نقطة زمنية
اختر النسخ المنطقية أو الفيزيائية وفق أهداف التعافي وتدرب على سلسلة كاملة، وافصل التعافي بعد الانهيار عن عكس خطأ محفوظ.
في هذه الصفحة
أهداف الدرس
- شرح التفريغ المنطقي والنسخ الأساسية وWAL المؤرشفة.
- التحقق من حدود التعافي المعزول والثوابت التجارية.
ابدأ بالفقد والتأخير المقبولين
يحدد RPO التاريخ المفقود المقبول وRTO مدة الاستعادة. لا يضمن تفريغ ليلي فقد خمس دقائق. تصدر pg_dump قاعدة واحدة منطقياً باتساق، وتحتاج الأدوار العامة معالجة منفصلة مثل نطاق pg_dumpall المناسب. تحفظ النسخة الفيزيائية حالة العنقود للتعافي المتوافق بـ WAL. اختر وفق الحوادث والنقل والزمن المقاس لا حجم الملف فقط.
احصر ما يجب بقاؤه بعد الاستعادة
الجداول جزء من الخدمة. احصر المخططات والروتينات والإضافات والملكية والمنح والكائنات الكبيرة والأسرار والإعداد وفق الطريقة. قد تنفذ شيفرة التفريغ أثناء الاستعادة فعامل مصدره كمدخل إداري موثوق. يحصر الاستعلام المخططات والإضافات ولا ينشئ نسخة أو يصدر أسراراً أو يثبت وجود الحزمة بالوجهة.
SELECT schema_name FROM information_schema.schemata
ORDER BY schema_name;
SELECT extname, extversion FROM pg_extension ORDER BY extname;
تعتمد النتائج على الرؤية والإضافات؛ احفظ بياناً مراجعاً مع النسخة.
يحتاج PITR نسخة فيزيائية وسلسلة WAL متصلة
يجمع التعافي نسخة فيزيائية وكل مقاطع WAL المطلوبة حتى الحد. لا تصلح pg_dump أساساً لإعادتها. تكسر الفجوة السلسلة ولو وجد الأحدث. احفظ الخط الزمني وحدد الوقوف قبل الهدف أو بعده وفق الإعداد. غيرت 12 آلية recovery.conf القديمة وأدخلت 17 نسخاً أساسية تزايدية بشروط وتجميع خاصين.
تحقق من حالة العمل لا عدد الكائنات فقط
بعد التعافي المعزول قارن معاملات سليمة وتغييرات مستبعدة وثوابت. يفحص الاستعلام مساواة الحجز وبنوده مع افتراض الصفر بلا بنود ومجموع غير NULL. قد تتطلب الضرائب والتقريب ثابتاً آخر. تعني النتيجة الخالية نجاح الفحص وحده لا كل الجداول والمنح والحدود، ولم تنفذ استعادة هنا.
SELECT b.booking_id, b.total, COALESCE(l.total, 0) AS line_total
FROM recovered_lab.bookings AS b
LEFT JOIN (SELECT booking_id, SUM(amount) AS total
FROM recovered_lab.booking_lines GROUP BY booking_id) AS l
ON l.booking_id = b.booking_id
WHERE b.total <> COALESCE(l.total, 0)
ORDER BY b.booking_id;
المتوقع بعد استعادة تدريب صحيحة عدم وجود اختلاف وفق الثابت.
يحتاج التعافي استقلالاً محمياً
احتفظ بالنسخ والسجلات خارج نطاق فشل المصدر مع مفاتيح ووصول مختبرين. استعد لبيئة مستقلة ممنوعة الأثر قبل التوجيه واعزل المهام والخروج وفق الإجراء. قس التجهيز والإعادة وفحص التطبيق. قد تنسخ النسخة DELETE ويحفظ التعافي بعد الانهيار العمل المحفوظ، فلا يعوضان التاريخ الاحتياطي. لا يقدم المقرر أوامر استعادة أو ترقية تنفيذية.
الأخطاء الشائعة وإصلاحها
يستخدم التفريغ المنطقي أساساً لإعادة WAL
- لماذا يحدث؟
- اختلط التعافي المنطقي بالفيزيائي.
- كيف تصلحه؟
- استخدم سلسلة النسخ الفيزيائية الموثقة لـ PITR.
- كيف تتجنب تكراره؟
- سجل النوع والإصدار والخط ومتطلبات WAL.
لا يتجاوز التعافي مقطع WAL مفقوداً
- لماذا يحدث؟
- ترك الاحتفاظ أو النقل فجوة.
- كيف تصلحه؟
- ابحث عن سلسلة محمية كاملة أو اذكر آخر هدف مثبت.
- كيف تتجنب تكراره؟
- تحقق من الأرشفة والتعافي قبل انتهاء الاحتفاظ.
تبدأ الاستعادة ولا يعمل التطبيق
- لماذا يحدث؟
- تغيب إضافات أو ملكية أو منح أو إعداد خارجي.
- كيف تصلحه؟
- قارن البيان واختبر هوية الخدمة معزولاً.
- كيف تتجنب تكراره؟
- ضمّن التطبيق والكائنات العامة في التدريب.
اختبر فهمك
1. توجد نسخة أساسية وتغيب WAL بين B وC. هل تضمن الملفات اللاحقة التعافي بعد C؟
اعرض الحل المشروح
لا؛ يمنع التاريخ المفقود إعادة السلسلة. ابحث عن أرشيف مستقل كامل أو أساس لاحق وسجلاته كاملة واختبره. وإلا اذكر آخر نقطة مثبتة وفقدها؛ لا تعيد أسماء الملفات التاريخ الغائب.
2. لماذا لا يعكس تشغيل PostgreSQL من جديد حذف الأمس المحفوظ؟
اعرض الحل المشروح
يحفظ تعافي الانهيار التغييرات المحفوظة ومنها DELETE الخاطئة. يحتاج التعافي التاريخي نسخة أسبق وحداً قبلها أو مصالحة مصرحاً بها. احفظ المصدر والأدلة واستعد معزولاً وتحقق قبل التحويل.
أهم ما تعلمته
- PITR سلسلة فيزيائية وWAL متحققة لا اختصار تفريغ منطقي.
- تثبت النسخ المستقلة والتدريب قابلية التعافي.