كيفية جدولة النسخ الاحتياطي التلقائي لقاعدة البيانات PostgreSQL باستخدام pgAgent في pgAdmin

مقدمة

يعد pgAgent أداة تُستخدم لجدولة المهام لقواعد بيانات PostgreSQL. كما أن لديها إمكانيات جدولة أكثر قوة من الأمر الشائع cron لأنها بُنيت خصيصًا للتعامل مع مهام Postgres. على سبيل المثال، يمكن لـ pgAgent جدولة خطوات متعددة بدون دفتر أو بدون تكرار الأمر. من المهم أن نلاحظ أنه حتى إذا كان لديك pgAdmin مثبتًا، يجب تنزيل pgAgent بشكل مستقل، على وجه التحديد كاملة ل pgAdmin.

في هذا البرنامج التعليمي، ستقوم بتثبيت pgAgent، تكوين قاعد البيانات لاستخدام pgAgent على واجهة المستخدم الرسومية لـ pgAdmin (GUI)، إعداد pgAgent كخدمة، ومن ثم استخدام pgAgent لجدولة وظيفة تقوم بنسخ احتياطي لقاعدة البيانات الخاصة بك.

المتطلبات

لمتابعة هذا البرنامج التعليمي، ستحتاج إلى:

الخطوة 1 — تثبيت pgAgent

كما ذكر سابقًا، لا يتم تكوين pgAgent تلقائيًا عند تثبيت pgAdmin. يمكنك تثبيت pgAgent من الطرفية الخاصة بك عن طريق تشغيل apt install واسم الحزمة pgagent كما في الأمر التالي:

  1. sudo apt install pgagent

بعد تثبيت pgAgent، انتقل إلى الخطوة التالية لتكوين قاعدة البيانات الخاصة بك لاستخدام pgAgent في pgAdmin.

الخطوة 2 — تكوين قاعدة البيانات الخاصة بك لـ pgAgent

بعد اتباع المتطلبات الأساسية، تم إعداد pgAdmin وجاهز للاستخدام. يمكنك تكوين قاعدة البيانات الخاصة بك لاستخدام pgAgent من خلال pgAdmin. افتح متصفح الويب الخاص بك وانتقل إلى تطبيق pgAdmin على http://your_domain. بمجرد تسجيل الدخول إلى حسابك، انتقل إلى شجرة التحكم على اللوحة الجانبية اليسرى. ابحث عن قاعدة البيانات التي قمت بإنشائها بعنوان sammy ووسع القائمة. من هذه القائمة، ستجد خيارًا يسمى Extensions. بمجرد العثور عليه، انقر بزر الماوس الأيمن واختر الخيار Query Tool:

Select the Query Tool from the Extensions drop-down list

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

  1. CREATE EXTENSION pgagent;

يُمثل هذا الخطوة باستخدام وظيفة Query Tool في المثال التالي:

Run the CREATE EXTENSION command

تحت علامة Messages، ستظهر إخراجًا يعيد Query returned successfully in 300 msec. وهذا يؤكد أن إضافة pgAgent تم إنشاؤها بنجاح.

ملاحظة: إذا لم يتم تحميل لغة plpgsql المناسبة في قاعدة البيانات الخاصة بك، ستتلقى رسالة خطأ تقول:

Output
ERROR: language "plpgsql" does not exist HINT: Use CREATE EXTENSION to load the language into the database. SQL state: 42704

إذا حدثت هذه المشكلة، يجب عليك تشغيل CREATE LANGUAGE لتثبيت لغة البرمجة pl/pgsql المطلوبة. يمكنك تثبيت ذلك بتشغيل الأمر التالي:

  1. CREATE LANGUAGE plpgsql;

بمجرد تثبيت لغة pl/pgsql، ستظهر رسالة في الأسفل تشير إلى شيء مثل تمت إعادة الاستعلام بنجاح في 231 مللي ثانية. بعد ذلك، قم بتشغيل الاستعلام CREATE EXTENSION pgagent مرة أخرى.

بعد تشغيل هذه الاستعلامات، تحت الملحقات، ستظهر عناصران لـ pgagent و plpgsql:

pgAgent and plpgsql language listed

A new item in the tree control on the left-hand side will appear called pgAgent Jobs. This signifies that pgAgent was successfully installed on your pgAdmin account. Next, you will set up pgAgent as a daemon so that it can run your jobs successfully.

ملاحظة: إذا لم تظهر هذه العناصر لك مباشرة، قم بتحديث صفحة المتصفح الخاصة بك، ويجب أن تظهر إذا كانت استعلاماتك ناجحة.

الخطوة 3 — إعداد pgAgent كبرنامج خلفي

الآن بعد أن قمت بتثبيت pgAgent وتكوينه لقاعدة البيانات الخاصة بك من خلال pgAdmin، يتعين عليك إعداد pgAgent كبرنامج خلفي على خادمك. برنامج خلفي هو برنامج يعمل كعملية مستمرة في الخلفية وينفذ مهام الخدمة. يعمل pgAgent كبرنامج خلفي على أنظمة Unix وعادةً على خادم قاعدة البيانات نفسه.

لإعداد pgAgent كبرنامج خلفي، تحتاج إلى سلسلة اتصال PostgreSQL حتى عندما تجدول وظيفتك، ستقوم العملية بالتنفيذ بشكل مناسب. في هذه الحالة، أنت تقوم بإعداد سلسلة اتصال PostgreSQL libpq، وهذا يعني سلسلة تتصل بمعلمات معينة قمت بتعيينها. يمكنك معرفة المزيد حول وظائف اتصال PostgreSQL libpq في وثائق PostgreSQL.

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

  1. pgagent host=/var/run/postgresql dbname=sammy user=sammy

إذا لم يعُد أي شيء في إخراجك ولم تتلق رسالة خطأ في الاتصال، فقد نجحت عملية إعداد سلسلة الاتصال.

بعد إنشاء سلسلة الاتصال، أنت جاهز الآن لجدولة وظيفة باستخدام pgAgent.

الخطوة 4 — جدولة وظيفة باستخدام pgAgent

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

لأغراض هذا البرنامج التعليمي، ستستخدم pgAgent لإنشاء وظيفة ستقوم بنسخ قاعدة البيانات sammy الخاصة بك كل دقيقة في كل يوم من أيام الأسبوع. يمكنك البدء بالنقر بزر الماوس الأيمن على وظائف pgAgent واختيار إنشاء ثم وظيفة pgAgent… كما هو موضح فيما يلي:

Create your pgAgent Job

مرة واحدة تقوم بذلك، سيظهر تنبيه بعنوان إنشاء – وظيفة pgAgent، ويمكنك بدء إكمال المعلومات المطلوبة في علامة عامة. في هذا المثال، سنستخدم الاسم sammy_backup ولن نحدد عامل المضيف لأننا نريد أن نتمكن من تشغيل هذه المهمة على أي مضيف. بالإضافة إلى ذلك، سنترك فئة العمل كصيانة روتينية. إذا كنت ترغب في تضمين أي تعليقات أخرى، فلا تتردد في فعل ذلك في قسم التعليق:

Prompt for creating your pgAgent job

بعد ذلك، انتقل إلى علامة خطوات. انقر فوق الرمز + في الزاوية العلوية اليمنى لإنشاء خطوة. في هذا المثال، سنسمي هذه الخطوة خطوة1. ثم، لتوسيع خياراتك، انقر على القلم على الجانب الأيسر من رمز سلة المهملات. يتم تشغيل زر تم التمكين؟ افتراضيًا ليكون مفعلاً ويدل على أن هذه الخطوة ستتم إدراجها عند تنفيذ هذه المهمة.

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

بالنسبة لحقل قاعدة البيانات، تأكد من تحديد قاعدة البيانات الصحيحة، هنا قمنا بتحديد sammy. بخيار في حالة الخطأ، يمكنك تخصيص استجابة pgAgent إذا حدث خطأ عند تنفيذ خطوة. في هذه الحالة، قمنا باختيار Fail لإعلامنا إذا كان هناك خطأ عند محاولة معالجة الخطوة. مرة أخرى، إذا كنت ترغب في إضافة ملاحظات إضافية، يمكنك إضافتها في مربع التعليق:

Create a step for your pgAgent job

Dentro de la misma pestaña Pasos también hay una pestaña de Código. Si seleccionaste Lote como hicimos en este ejemplo, entonces navega hasta esa pestaña de Código. Una vez que estés en esta pestaña, hay una línea vacía para que insertes tu comando PostgreSQL. Puedes sustituir tu propio comando de respaldo aquí con tu conjunto personalizado de opciones. Cualquier comando válido es aceptable.

Este tutorial usará el comando pg_dump para respaldar tu base de datos de Postgres sammy. En este comando, incluye tu nombre de usuario específico, el nombre de la base de datos y la bandera --clean, que ayuda con pg_dump al eliminar o “limpiar” los objetos de la base de datos antes de generar cualquier comando que se esté creando. Para la bandera --file, estás especificando la ubicación exacta donde se guardarán los archivos de respaldo. La parte final de esta declaración date +%Y-%m-%d-%H-%M-%S es para generar dinámicamente una fecha y múltiples archivos para cada respaldo. De lo contrario, el archivo de respaldo sobrescribirá constantemente y se guardará sobre el existente. De esta manera, puedes hacer un seguimiento de cada uno de tus archivos de respaldo para cualquier momento o fecha especificada que hayas programado. Tu comando completo será el siguiente:

pg_dump --username=sammy --dbname=sammy --clean --file=/home/sammy/backup-`date +%Y-%m-%d-%H-%M-%S`.sql
Add command in Code tab for pgAgent step

Nota: Si decides guardar tus archivos de respaldo en una ubicación diferente, asegúrate de usar una ruta absoluta hacia tu directorio elegido. Por ejemplo, aunque ~/ normalmente apunta al directorio de inicio de /home/sammy/, pg_dump en este caso requiere la ruta absoluta de /home/sammy/.

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

pgAgent Schedule options

الآن قم بالانتقال إلى علامة التبويب Repeat. هنا يمكنك تخصيص تكرار تنفيذ هذه المهمة المجدولة بالتحديد. يمكنك أن تكون دقيقًا قدر الإمكان فيما يتعلق بالأسبوع، أو الشهر، أو التاريخ، أو الساعات، أو الدقائق. يرجى ملاحظة أن عدم اختيارك لشيء ما يعتبر نفسه كاختيار Select All. لذلك، إذا تركت Week Days فارغة، سيأخذ الجدول الزمني في اعتباره جميع أيام الأسبوع. بالمثل، مع Times، يمكنك ترك الساعات أو الدقائق فارغة، وهذا نفسه كـ Selecting All. تذكر أن الأوقات تأتي في تنسيق سجل cron، لذلك، على سبيل المثال، لإنشاء نسخة احتياطية كل دقيقة، يجب عليك اختيار كل دقيقة في الساعة (00 إلى 59). لتوضيح ذلك، لقد اخترنا Select All للدقائق. يتم إدراج جميع الدقائق، ولكن تركها فارغة سيحقق نفس النتائج أيضًا:

Customize dates and times for job schedule on Repeat tab

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

ملاحظة: يتم تنفيذ المهمة أيضًا استنادًا إلى الجدول الزمني، لذا في أي وقت يتم تعديلها، سيتم إعادة حساب وقت التشغيل المجدول. وعند حدوث ذلك، سيقوم pgAgent بفحص قاعدة البيانات للحصول على قيمة آخر وقت تشغيل مجدول ومن ثم، من المرجح أن يبدأ في غضون دقيقة من ذلك الوقت المحدد. إذا كانت هناك مشكلات، فعند بدء تشغيل pgAgent مرة أخرى، سيعود إلى الجدول الزمني العادي الذي قمت بتعيينه.

عندما تنتهي من إعداد وتخصيص الجدول الزمني الذي ترغب في تنفيذه، اضغط على الزر Save. سيظهر وظيفة جديدة لـ pgAgent على شجرة التحكم على الجهة اليسرى بتسمية وظيفتك. على سبيل المثال، ستظهر sammy_backup مع Schedules و Steps المدرجة أسفلها:

Your pgAgent backup job step and schedule will now be listed

الآن بعد أن قمت بإنشاء وظيفة pgAgent بنجاح، في الخطوة التالية، ستتعلم كيفية التحقق من أن وظيفة pgAgent الخاصة بك تعمل بنجاح.

الخطوة 5 — التحقق من وظيفة pgAgent الخاصة بك

يمكنك التحقق مما إذا كانت وظيفتك المجدولة لإنشاء ملف نسخ احتياطي لقاعدة البيانات الخاصة بك كل دقيقة تعمل بطرق متعددة. في pgAdmin، يمكنك الانتقال إلى شجرة التحكم على الجهة اليسرى والنقر فوق sammy_backup. من هناك، انتقل إلى علامة التبويب المسماة Statistics. ستقوم صفحة Statistics بسرد كل حالة من حالات وظيفتك المجدولة كما يلي:

Verify if your job is working with pgAgent’s Statistics tab

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

إذا كنت تفضل التحقق من أن وظيفتك تعمل من سطر الأوامر، يمكنك تشغيل الأمر ls ~ لعرض ملفات دليل المنزل الخاص بك. في هذا البرنامج التعليمي، قمت بتحديد الموقع الدقيق لهذا الدليل المنزل عند كتابة الأمر pg_dump في الخطوة 4:

  1. ls ~

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

الخطوة 6 — تعديل، تعطيل، حذف، وتنفيذ وظائف pgAgent يدويًا (اختياري)

يوفر pgAgent مرونة عندما يتعلق الأمر بتعديل أو تعطيل وظيفة. باستخدام pgAdmin، يمكنك الانتقال إلى وظيفة pgAgent المحددة، في هذه الحالة، sammy_backup. ثم انقر بزر الماوس الأيمن واختر الخيار الخصائص من القائمة. من هنا يمكنك الضغط على أيقونة القلم في الأعلى لإجراء تعديلات على وظيفتك:

pgAgent Properties options such as modifying your job

إذا كنت في الخصائص وقمت بالضغط على أيقونة القلم، يمكنك الانتقال إلى علامة التبويب الجداول الزمنية لتعطيل وظيفتك كما في الصورة التالية:

You can disable your pgAgent job in the Properties tab

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

You can also choose to delete or manually run your job from the drop-down list

على الرغم من أن هذه مجرد بعض الوظائف لاستخدام pgAgent لجدولة الوظائف، إلا أن هناك العديد من الإمكانيات الأخرى. على سبيل المثال، قد ترغب في جدولة وظيفة تقوم بإنشاء نسخة احتياطية لجميع المستخدمين والأدوار في قاعدة البيانات الخاصة بك، على وجه الخصوص باستخدام الأمر pg_dumpall --globals only. يمكنك حتى استخدام النصوص الدفعية الأكثر تعقيدًا مع الوظائف الدفعية، والتي يمكنك معرفة المزيد عنها من صفحة ويكي بوستغريسكيويل.

الاستنتاج

pgAgent مفيد لجدولة مختلف الوظائف التي قد تساعد في تقليل بعض المهام اليومية الروتينية ولكن الضرورية، مثل عمل نسخ احتياطية لقاعدة البيانات بانتظام. بمجرد أن تشعر بالراحة أكثر في استخدام هذه الأداة، يمكنك حتى محاولة إنشاء وظيفة متعددة الخطوات أو مهام SQL التي تتطلب جدولة معقدة. إذا كنت ترغب في معرفة المزيد، يمكنك قراءة التوثيق الرسمي لـ pgAgent على موقع pgAdmin.

Source:
https://www.digitalocean.com/community/tutorials/how-to-schedule-automatic-backups-for-postgresql-with-pgagent-in-pgadmin