تُعدّ هجرة قواعد البيانات من أكثر المهام حرجًا وخطورة في هندسة البرمجيات. سواء كنت ترفع الإصدار من 9.6 إلى 15، أو تنتقل من الخوادم المحلية إلى البنية السحابية مثل AWS RDS، أو تبدّل بين مزودي الاستضافة، فإن فشل عملية الهجرة قد يؤدي إلى فقدان البيانات وتوقف الخدمة بشكل كبير. يستكشف هذا الدليل أكثر الأساليب موثوقية لهجرة قواعد بيانات PostgreSQL، مع الحفاظ على التوازن بين الأمان والسرعة وتقليل الاضطرابات.
اختيار الاستراتيجية المناسبة
قبل الغوص في الأوامر، يجب عليك اختيار الاستراتيجية المناسبة بناءً على مدى تقبلك لتوقف الخدمة وحجم البيانات. النهجان الرئيسيان هما النسخ الاحتياطي المنطقي والاستعادة والتكرار المادي/المنطقي.
- النسخ الاحتياطي المنطقي (pg_dump): الأفضل للقواعد البيانات الصغيرة إلى المتوسطة أو عندما يكون توقف الخدمة المحدود مقبولاً. يقوم بتصدير البيانات كملفات بصيغة SQL أو صيغة مخصصة.
- التكرار المنطقي: مثالي للقواعد البيانات الكبيرة التي تتطلب توقفًا شبه معدوم. يقوم ببث التغييرات في الوقت الفعلي حتى التبديل النهائي.
الطريقة 1: استخدام pg_dump و pg_restore
أداة pg_dump هي المعيار الصناعي للنسخ الاحتياطي المنطقي. إنها واعية بالمخطط ويمكنها التعامل مع أنواع البيانات المعقدة والدوال والمحفزات. في بيئات الإنتاج، استخدم دائمًا الصيغة المخصصة (-Fc) للسماح بالاستعادة المتوازية واستعادة جداول محددة.
الخطوة 1: إنشاء النسخة الاحتياطية
اتصل بقاعدة البيانات المصدرية وأنشئ أرشيفًا مضغوطًا بصيغة مخصصة.
# تصدير جميع الجداول والمخططات والبيانات
pg_dump -h old-db-host -p 5432 -U postgres -Fc -f production_backup.dump mydb
# للقواعد البيانات الكبيرة، استخدم عمالًا متوازيين لتسريع العملية
pg_dumpall -h old-db-host -p 5432 -U postgres -Fc -f full_cluster_backup.dump
الخطوة 2: النقل والاستعادة
انقل ملف النسخة الاحتياطية بأمان إلى الخادم الجديد باستخدام scp أو التخزين السحابي. ثم، استعد البيانات في النسخة الجديدة. الاستعادة المتوازية حاسمة للأداء.
# إنشاء قاعدة بيانات فارغة في النسخة الجديدة
createdb -h new-db-host -U postgres mydb_new
# الاستعادة باستخدام عمال متوازيين
pg_restore -h new-db-host -p 5432 -U postgres -d mydb_new -j 4 --no-owner production_backup.dump
ملاحظة: يضمن علم --no-owner أن المستخدم الحالي يملك جميع الكائنات، مما يمنع مشاكل الصلاحيات إذا لم يكن المستخدم الأصلي موجودًا على الخادم الجديد.
الطريقة 2: توقف صفر عبر التكرار المنطقي
للقواعد البيانات الضخمة حيث يكون توقف الخدمة غير مقبول، يسمح التكرار المنطقي للنسخة الجديدة بالبقاء متزامنة مع القديمة. يتطلب هذا PostgreSQL الإصدار 10 أو أحدث.
خطوات التهيئة
- قاعدة البيانات المصدرية: فعّل أرشفة WAL أو تأكد من وجود
max_wal_sendersكافٍ. - قاعدة البيانات المستهدفة: أنشئ فتحة تكرار (replication slot).
- التهيئة: استخدم
pg_basebackupللإعداد المادي أو فتحات التكرار المنطقي للمزامنة المنطقية البحتة.
على خادم الهدف، أنشئ فتحة تكرار للاحتفاظ بسجلات WAL:
CREATE REPLICATION SLOT my_rep_slot LOGICAL "pgoutput";
على خادم المصدر، انشر جميع الجداول للتكرار:
CREATE PUBLICATION my_pub FOR ALL TABLES;
على الهدف، أنشئ اشتراكًا لبدء بث البيانات:
SUBSCRIBE my_sub TO my_pub
CONNECTION 'host=old-db-host port=5432 user=replicator password=secret'
WITH (copy_data = true);
بمجرد أن يلحق الاشتراك (تحقق من ذلك بفحص pg_stat_subscription)، يمكنك إيقاف الكتابة إلى قاعدة البيانات القديمة، وإجراء التبديل النهائي، وإسقاط الاشتراك.
التحقق وأفضل الممارسات
لا تثق أبدًا بهجرة بدون تحقق. بعد الاستعادة، نفّذ استعلامات الفحص (checksum) لمقارنة عدد الصفوف وعينات البيانات الحرجة بين المصدر والهدف.
-- فحص عدد الصفوف لجداول حرجة
SELECT COUNT(*) FROM orders;
-- فحص سلامة المفاتيح الأجنبية المفقودة
SELECT COUNT(*) FROM child_table WHERE id NOT IN (SELECT id FROM parent_table);
تشمل أفضل الممارسات الرئيسية ما يلي:
- الاختبار في بيئة تجريبية: قم دائمًا بتجربة الهجرة في بيئة تشبه بيئة الإنتاج أولاً.
- النسخ الاحتياطي قبل الهجرة: تأكد من وجود نسخة احتياطية كاملة للمصدر قبل البدء.
- مراقبة إدخال/إخراج القرص: يمكن للنسخ الاحتياطية الكبيرة أن تشبع عرض نطاق القرص؛ جدولة العملية خلال ساعات الذروة المنخفضة إذا كنت تستخدم
pg_dump. - توافق المخطط: إذا كنت تعبر بين إصدارات رئيسية (مثل 9.6 إلى 12)، تحقق من الميزات غير المدعومة باستخدام وضع الفحص في
pg_upgrade.
الخلاصة
يعتمد اختيار مسار الهجرة الصحيح على قيودك المحددة. لمعظم التطبيقات، يوفر pg_dump مع الصيغة المخصصة حلًا قويًا ومباشرًا. ومع ذلك، للأنظمة الحرجة ذات متطلبات التوفر العالي، يوفر التكرار المنطقي شبكة أمان من خلال المزامنة في الوقت الفعلي. باتباع هذه الخطوات والتحقق بدقة من سلامة البيانات، يمكنك هجرة قواعد بيانات PostgreSQL بثقة ومخاطر دنيا.