0Pricing
SQL Academy · درس

النسخ الاحتياطية المنطقية مقابل الفعلية

تعرّف إلى pg_dump والنسخ الاحتياطية الأساسية

النسخ الاحتياطية المنطقية مقابل الفعلية درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

ما النسخة الاحتياطية لقاعدة البيانات؟

النسخة الاحتياطية هي نسخة من بيانات قاعدة البيانات يمكن استخدامها لاستعادة النظام بعد فقدان البيانات أو تلفها أو وقوع كارثة. ومن دون نسخ احتياطية موثوقة، قد يؤدي عطل واحد في الأجهزة أو تنفيذ DELETE عن طريق الخطأ إلى تدمير بيانات أشهر أو سنوات تدميرًا نهائيًا.

يوفر PostgreSQL فئتين عامتين من استراتيجيات النسخ الاحتياطي: النسخ الاحتياطية المنطقية والنسخ الاحتياطية المادية. ولكل منهما خصائص وحالات استخدام ومفاضلات مميزة يجب على كل مسؤول قاعدة بيانات فهمها.

شرح النسخ الاحتياطية المنطقية

تُصدّر النسخة الاحتياطية المنطقية قاعدة البيانات على هيئة عبارات SQL قابلة للقراءة البشرية — مثل CREATE TABLE وINSERT وCOPY والأوامر المشابهة. والأداة الأكثر شيوعًا لهذا الغرض في PostgreSQL هي pg_dump.

نظرًا لأن الناتج عبارة عن SQL عادي، تكون النسخة الاحتياطية المنطقية قابلة للنقل: إذ يمكن استعادتها إلى إصدار مختلف من PostgreSQL أو نظام تشغيل مختلف، بل يمكن أيضًا استعادة جداول أو مخططات فردية منها بشكل انتقائي. أما المفاضلة فهي أن تفريغ قواعد البيانات الكبيرة واستعادتها قد يستغرق وقتًا طويلًا.

استخدام pg_dump لإنشاء نسخة احتياطية منطقية

تُشغّل الأداة pg_dump من سطر الأوامر، وليس داخل SQL. وتتصل الأداة بخادم PostgreSQL قيد التشغيل وتُصدّر قاعدة البيانات المختارة. ويمكن إخراج البيانات بصيغة SQL عادية، أو بصيغة مخصصة مضغوطة، أو بصيغة الدليل.

يحاكي SQL أدناه ما تلتقطه النسخة الاحتياطية المنطقية — بنية الجدول وبياناته على هيئة عبارات قابلة لإعادة الإنشاء.

-- Simulating what pg_dump produces for a table
-- (These statements are written by pg_dump into the backup file)

CREATE TABLE orders (
    id        SERIAL PRIMARY KEY,
    customer  TEXT        NOT NULL,
    amount    NUMERIC(10,2),
    created_at TIMESTAMPTZ DEFAULT now()
);

INSERT INTO orders (customer, amount, created_at) VALUES
    ('Alice',  149.99, '2024-01-15 09:30:00+00'),
    ('Bob',     89.50, '2024-01-16 14:00:00+00'),
    ('Carol',  210.00, '2024-01-17 11:15:00+00');

صيغ إخراج pg_dump

يدعم pg_dump أربع صيغ للإخراج، وتناسب كل منها سير عمل مختلفًا للاستعادة:

  • plain — برنامج نصي بصيغة SQL عادية، يمكن قراءته في أي محرر نصوص.
  • custom — صيغة ثنائية مضغوطة؛ وهي الأكثر مرونة وتدعم الاستعادة المتوازية.
  • directory — ملف واحد لكل جدول، وتدعم التفريغ والاستعادة المتوازيين.
  • tar — أرشيف tar بصيغة الدليل.

يُوصى باستخدام الصيغة المخصصة لقواعد البيانات الكبيرة، لأن pg_restore يستطيع استعادة الكائنات بالتوازي باستخدام -j N من العاملين.

-- Checking which databases exist before choosing what to back up
SELECT datname,
       pg_size_pretty(pg_database_size(datname)) AS size
FROM   pg_database
WHERE  datname NOT IN ('template0', 'template1')
ORDER  BY pg_database_size(datname) DESC;

استعادة نسخة احتياطية منطقية

تُستعاد النسخة الاحتياطية المنطقية بصيغة SQL عادي باستخدام psql. أما النسخة الاحتياطية بالصّيغة المخصصة فتتطلب pg_restore. وتعيد كلتا الأداتين تشغيل عبارات SQL لإعادة إنشاء الجداول والفهارس والقيود والبيانات.

نظرًا لأن النسخ الاحتياطية المنطقية تحتوي على SQL، يمكن تعديلها قبل الاستعادة — مثلًا لاستعادة جدول واحد فقط أو تغيير اسم مخطط. وتُعد هذه المرونة إحدى أكبر مزايا النهج المنطقي.

-- After restoring a backup, verify row counts match expectations
SELECT
    schemaname,
    relname           AS table_name,
    n_live_tup        AS estimated_rows
FROM  pg_stat_user_tables
ORDER BY n_live_tup DESC;

شرح النسخ الاحتياطية المادية

تنسخ النسخة الاحتياطية المادية (وتُسمى أيضًا النسخة الاحتياطية الأساسية) ملفات البيانات الخام التي يستخدمها PostgreSQL على القرص — أي الصفحات ومقاطع WAL (سجل الكتابة المسبقة) وملفات الإعداد. وتكون النتيجة لقطة ثنائية للعنقود بأكمله في نقطة زمنية محددة.

تكون استعادة النسخ الاحتياطية المادية عادةً أسرع بكثير لقواعد البيانات الكبيرة، إذ لا توجد حاجة إلى إعادة تنفيذ SQL؛ فكل ما يفعله PostgreSQL هو إعادة قراءة الملفات إلى مواضعها ثم إعادة تشغيل WAL للوصول إلى حالة متسقة.

pg_basebackup: إنشاء نسخة احتياطية مادية

تُعد pg_basebackup أداة PostgreSQL القياسية لإنشاء النسخ الاحتياطية المادية. وهي تبث دليل البيانات من خادم أساسي قيد التشغيل عبر اتصال النسخ المتماثل. وتحتاج إلى مستخدم يتمتع بامتيازات النسخ المتماثل، وإلى ضبط wal_level على replica أو مستوى أعلى.

يمكن الاستعلام داخل قاعدة البيانات عن إعدادات النسخ المتماثل للتأكد من ضبط الخادم بطريقة صحيحة قبل محاولة إنشاء نسخة احتياطية أساسية.

-- Verify WAL level and replication settings before a physical backup
SELECT name, setting, unit
FROM   pg_settings
WHERE  name IN (
    'wal_level',
    'max_wal_senders',
    'archive_mode',
    'archive_command'
)
ORDER  BY name;

أرشفة WAL والاسترداد إلى نقطة زمنية

تلتقط النسخة الاحتياطية الأساسية لحظة زمنية واحدة. وللاسترداد إلى أي نقطة زمنية اعتباطية بعد تلك النسخة، يعيد PostgreSQL تشغيل مقاطع WAL المؤرشفة — ويُسمى ذلك الاسترداد إلى نقطة زمنية (PITR).

عند ضبط archive_mode = on وتهيئة archive_command، ينسخ PostgreSQL مقاطع WAL المكتملة إلى موقع أرشيف. وأثناء الاسترداد، يجلب restore_command تلك المقاطع مجددًا كي يتمكن الخادم من إعادة تشغيلها حتى الوقت المستهدف.

-- Inspect current WAL position and archive status
SELECT
    pg_current_wal_lsn()                        AS current_lsn,
    pg_walfile_name(pg_current_wal_lsn())        AS current_wal_file,
    archived_count,
    failed_count,
    last_archived_wal,
    last_archived_time
FROM  pg_stat_archiver;

مقارنة النسخ الاحتياطية المنطقية والمادية

يعتمد الاختيار بين النسخ الاحتياطية المنطقية والمادية على متطلباتكم:

  • المنطقية (pg_dump): قابلة للنقل بين الإصدارات، وتدعم الاستعادة الجزئية، وقابلة للقراءة البشرية، لكنها بطيئة في قواعد البيانات الكبيرة ولا توفر دقة على مستوى المعاملة الفرعية.
  • المادية (pg_basebackup + WAL): توفر استعادة سريعة للعناقيد الكبيرة، وتدعم PITR، ومرتبطة بإصدار محدد (إذ يجب استعادتها إلى الإصدار الرئيسي نفسه)، كما أنها تستعيد العنقود بأكمله — ولا يمكن استعادة جدول واحد منها.

تستخدم بيئات الإنتاج عادةً الاستراتيجيتين معًا: نسخًا احتياطية مادية أساسية ليلية مع أرشفة مستمرة لـ WAL، إضافةً إلى عمليات تفريغ منطقية دورية لتحقيق قابلية النقل والاستعادة الانتقائية الدقيقة.

التحقق من سلامة النسخة الاحتياطية

النسخة الاحتياطية التي لم تُختبر قط ليست نسخة احتياطية — بل مجرد أمل. ينبغي دائمًا التحقق من النسخ الاحتياطية باستعادتها إلى بيئة اختبار والتحقق من البيانات.

بالنسبة إلى النسخ الاحتياطية المنطقية، يتمثل فحص سريع للسلامة في عدّ الصفوف ومقارنة المجاميع الاختبارية. أما بالنسبة إلى النسخ الاحتياطية المادية، فقد قدم PostgreSQL 14+ الأداة pg_verifybackup التي تتحقق من ملف البيان الذي تكتبه pg_basebackup.

-- After a test restore, compare row counts across critical tables
SELECT
    relname                              AS table_name,
    n_live_tup                           AS live_rows,
    pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM  pg_stat_user_tables
WHERE  schemaname = 'public'
ORDER  BY n_live_tup DESC
LIMIT  20;

مراقبة النسخ الاحتياطية وجدولتها

تُعد أتمتة النسخ الاحتياطية ومراقبتها بأهمية إنشائها نفسها. وينبغي تتبع وقت تشغيل النسخ الاحتياطية آخر مرة، والمدة التي استغرقتها، وما إذا نجحت. ويوفر PostgreSQL بيانات وصفية مفيدة لهذا الغرض.

بالنسبة إلى النسخ الاحتياطية المادية، يعرض pg_stat_archiver آخر عملية أرشفة ناجحة وأي حالات فشل. أما بالنسبة إلى النسخ الاحتياطية المنطقية، فينبغي تغليف pg_dump داخل برنامج نصي يسجل وقت البدء ووقت الانتهاء وحجم الملف ورمز الخروج في جدول مراقبة أو نظام تنبيه.

-- Create a simple backup log table to track logical backup runs
CREATE TABLE IF NOT EXISTS backup_log (
    id          SERIAL PRIMARY KEY,
    backup_type TEXT        NOT NULL CHECK (backup_type IN ('logical', 'physical')),
    started_at  TIMESTAMPTZ NOT NULL DEFAULT now(),
    finished_at TIMESTAMPTZ,
    size_bytes  BIGINT,
    status      TEXT        NOT NULL DEFAULT 'running',
    notes       TEXT
);

-- Record the start of a logical backup job
INSERT INTO backup_log (backup_type, status)
VALUES ('logical', 'running')
RETURNING id, started_at;

اختبار سريع: المنطقية أم المادية

اختبروا مدى فهمكم لاستراتيجيات النسخ الاحتياطي المنطقية والمادية في PostgreSQL.

مراجعة الدرس: النسخ الاحتياطية المنطقية والمادية

استكشفتم في هذا الدرس استراتيجيتين أساسيتين للنسخ الاحتياطي في PostgreSQL:

  • النسخ الاحتياطية المنطقية تستخدم pg_dump لتصدير قواعد البيانات على هيئة عبارات SQL. وهي قابلة للنقل والقراءة البشرية، وتدعم الاستعادة الجزئية، لكنها قد تكون بطيئة جدًا في قواعد البيانات الكبيرة للغاية.
  • النسخ الاحتياطية المادية تستخدم pg_basebackup لنسخ ملفات البيانات الخام. وبالاقتران مع أرشفة WAL، تتيح استعادة سريعة والاسترداد إلى نقطة زمنية، لكنها مرتبطة بإصدار محدد وتستعيد العنقود بأكمله دائمًا.
  • تجمع أنظمة الإنتاج عادةً بين الاستراتيجيتين: نسخ احتياطية مادية أساسية مع أرشفة WAL لتحقيق استرداد سريع ودقيق، إضافةً إلى عمليات تفريغ منطقية دورية لتحقيق قابلية النقل.
  • احرصوا دائمًا على اختبار عمليات الاستعادة. فلا يمكن الوثوق بنسخة احتياطية لم تُختبر عند وقوع كارثة حقيقية.

يُعد فهم هذين النهجين أمرًا أساسيًا لتصميم خطة قوية للتعافي من الكوارث لأي عملية نشر لـ PostgreSQL.

الأسئلة الشائعة

هل درس «النسخ الاحتياطية المنطقية مقابل الفعلية» مجاني؟

نعم — نص درس «النسخ الاحتياطية المنطقية مقابل الفعلية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «النسخ الاحتياطية المنطقية مقابل الفعلية»؟

تعرّف إلى pg_dump والنسخ الاحتياطية الأساسية تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «النسخ الاحتياطية المنطقية مقابل الفعلية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. النسخ الاحتياطية المنطقية مقابل الفعلية
  2. الاسترداد إلى نقطة زمنية
  3. اختبار عمليات الاسترداد
  4. التخطيط للتعافي من الكوارث
← العودة إلى SQL Academy