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

ينطبق على:Azure Database لـPostgreSQL - خادم فرديAzure Database لـPostgreSQL - خادم مرن

يمكنك استخدام pg_dump لاستخراج قاعدة بيانات PostgreSQL في ملف نسخة احتياطية. تعتمد طريقة استعادة قاعدة البيانات على تنسيق النسخة الاحتياطية التي تختارها. إذا تم أخذ النسخة الاحتياطية الخاصة بك بتنسيق عادي (وهو الافتراضي -Fp، لذلك لا يحتاج أي خيار محدد إلى تحديد)، فإن الخيار الوحيد لاستعادته هو باستخدام psql، لأنه يقوم بإخراج ملف نص عادي. بالنسبة لأساليب التفريغ الثلاثة الأخرى: مخصص ودليل و tar، يجب استخدام pg_restore .

هام

تم تصميم الإرشادات والأوامر المقدمة في هذه المقالة ليتم تنفيذها في محطات bash الطرفية. يتضمن ذلك بيئات مثل نظام Windows الفرعي لـ Linux‬ (WSL) وAzure Cloud Shell وواجهات أخرى متوافقة مع bash. يرجى التأكد من أنك تستخدم محطة bash الطرفية لاتباع الخطوات وتنفيذ الأوامر المفصلة في هذا الدليل. قد يؤدي استخدام نوع مختلف من بيئة المحطة الطرفية أو بيئة shell إلى اختلافات في سلوك الأمر وقد لا ينتج النتائج المرجوة.

في هذه المقالة، نركز على تنسيقات عادية (افتراضية) ودليل. تنسيق الدليل مفيد لأنه يسمح لك باستخدام ذاكرات أساسية متعددة للمعالجة، والتي يمكن أن تعزز الكفاءة بشكل كبير، خاصة لقواعد البيانات الكبيرة.

يبسط مدخل Microsoft Azure هذه العملية عبر شفرة الاتصال من خلال تقديم أوامر تم تكوينها مسبقا مصممة خصيصا للخادم الخاص بك، مع قيم مستبدلة ببيانات المستخدم. من المهم ملاحظة أن شفرة الاتصال متاحة فقط لقاعدة بيانات Azure ل PostgreSQL - الخادم المرن وليس للخادم الفردي. فيما يلي كيفية استخدام هذه الميزة:

  1. الوصول إلى مدخل Microsoft Azure: أولا، انتقل إلى مدخل Microsoft Azure واختر شفرة الاتصال.

    Screenshot showing the placement of Connect blade in Azure portal.

  2. حدد قاعدة البيانات الخاصة بك: في جزء الاتصال، تجد قائمة منسدلة لقواعد البيانات الخاصة بك. حدد قاعدة البيانات التي ترغب في إجراء تفريغ منها.

    Screenshot showing the dropdown where specific database can be chosen.

  3. اختر الأسلوب المناسب: استنادا إلى حجم قاعدة البيانات، يمكنك الاختيار بين طريقتين:

    • pg_dump - psql باستخدام ملف نصي مفرد: مثالي لقواعد البيانات الأصغر، يستخدم هذا الخيار ملفا نصيا واحدا لعملية التفريغ والاستعادة.
    • pg_dump استخدام pg_restore ذاكرات أساسية متعددة: بالنسبة لقواعد البيانات الأكبر حجما، تكون هذه الطريقة أكثر كفاءة لأنها تستخدم ذاكرات أساسية متعددة للتعامل مع عملية التفريغ والاستعادة.

    Screenshot showing two possible dump methods.

  4. أوامر النسخ واللصق: يوفر لك المدخل أوامر جاهزة للاستخدام pg_dump و psql أو pg_restore . تأتي هذه الأوامر مع قيم تم استبدالها بالفعل وفقا للخادم وقاعدة البيانات التي اخترتها. انسخ هذه الأوامر والصقها.

المتطلبات الأساسية

إذا كنت تستخدم خادما واحدا، أو لم يكن لديك حق الوصول إلى مدخل Flexible Server، فاقرأ صفحة الوثائق هذه. يحتوي على معلومات مشابهة لما يتم تقديمه في شفرة الاتصال ل Flexible Server على المدخل.

للتقدم في هذا الدليل الإرشادي، تحتاج إلى:

  • قاعدة بيانات Azure لخادم PostgreSQL، بما في ذلك قواعد جدار الحماية للسماح بالوصول.
  • pg_dump وpsql pg_restore pg_dumpall في حالة رغبتك في الترحيل باستخدام الأدوار والأذونات، يتم تثبيت أدوات مساعدة سطر الأوامر.
  • حدد موقع النسخة الاحتياطية: اختر المكان الذي تريد إجراء تفريغ منه. يمكن القيام بذلك من مواقع مختلفة، مثل جهاز ظاهري منفصل أو cloud shell (حيث تم تثبيت أدوات سطر الأوامر المساعدة بالفعل، ولكن قد لا تكون في الإصدار المناسب، لذلك تحقق دائما من الإصدار باستخدام، على سبيل المثال، psql --version)، أو الكمبيوتر المحمول الخاص بك. ضع في اعتبارك دائما المسافة وزمن الانتقال بين خادم PostgreSQL والموقع الذي تقوم بتشغيل التفريغ أو الاستعادة منه.

هام

من الضروري استخدام pg_dumpو psqlpg_restore والأدوات pg_dumpall المساعدة التي هي إما من نفس الإصدار الرئيسي أو إصدار رئيسي أعلى من خادم قاعدة البيانات الذي تقوم بتصدير البيانات منه أو استيراد البيانات إليه. قد يؤدي عدم القيام بذلك إلى ترحيل غير ناجح للبيانات. إذا كان لدى الخادم الهدف إصدار رئيسي أعلى من الخادم المصدر، فاستخدم الأدوات المساعدة التي تكون إما نفس الإصدار الرئيسي أو أعلى من الخادم الهدف.

إشعار

من المهم أن تدرك أنه pg_dump يمكن تصدير قاعدة بيانات واحدة فقط في كل مرة. ينطبق هذا القيد بغض النظر عن الأسلوب الذي اخترته، سواء كان يستخدم ملفا مفردا أو ذاكرات أساسية متعددة.

تفريغ المستخدمين والأدوار باستخدام pg_dumpall -r

pg_dump يستخدم لاستخراج قاعدة بيانات PostgreSQL في ملف تفريغ. ومع ذلك، من المهم فهم أن pg_dump لا يتم تفريغ الأدوار أو تعريفات المستخدمين، حيث تعتبر هذه كائنات عمومية داخل بيئة PostgreSQL. لترحيل شامل، بما في ذلك المستخدمين والأدوار، تحتاج إلى استخدام pg_dumpall -r. يسمح لك هذا الأمر بالتقاط جميع معلومات الدور والمستخدم من بيئة PostgreSQL. إذا كنت تقوم بالترحيل داخل قواعد البيانات على نفس الخادم، فالرجاء عدم التردد في تخطي هذه الخطوة والانتقال إلى قسم إنشاء قاعدة بيانات جديدة.

pg_dumpall -r -h <server name> -U <user name> > roles.sql

على سبيل المثال، إذا كان لديك خادم باسم mydemoserver ومستخدم يسمى myuser ، فقم بتشغيل الأمر التالي:

pg_dumpall -r -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

إذا كنت تستخدم خادما واحدا، فإن اسم المستخدم الخاص بك يتضمن مكون اسم الخادم. لذلك، بدلا من myuser، استخدم myuser@mydemoserver.

تفريغ الأدوار من خادم مرن

في بيئة Flexible Server، تعني مقاييس الأمان المحسنة أن المستخدمين ليس لديهم حق الوصول إلى جدول pg_authid، وهو المكان الذي يتم فيه تخزين كلمات مرور الدور. يؤثر هذا التقييد على كيفية تنفيذ تفريغ الأدوار، حيث يحاول الأمر القياسي pg_dumpall -r الوصول إلى هذا الجدول لكلمات المرور ويفشل بسبب عدم وجود إذن.

عند تفريغ الأدوار من خادم مرن، من الضروري تضمين --no-role-passwords الخيار في الأمر الخاص بك pg_dumpall . يمنع pg_dumpall هذا الخيار من محاولة الوصول pg_authid إلى الجدول، والذي لا يمكنه قراءته بسبب قيود الأمان.

لتفريغ الأدوار بنجاح من خادم مرن، استخدم الأمر التالي:

pg_dumpall -r --no-role-passwords -h <server name> -U <user name> > roles.sql

على سبيل المثال، إذا كان لديك خادم يسمى mydemoserver، مستخدم يسمى myuser، فقم بتشغيل الأمر التالي:

pg_dumpall -r --no-role-passwords -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

تنظيف تفريغ الأدوار

عند ترحيل ملف roles.sql الإخراج قد يتضمن أدوارا وسمات معينة غير قابلة للتطبيق أو مسموح بها في البيئة الجديدة. إليك ما تحتاج إلى مراعاته:

  • إزالة السمات التي يمكن تعيينها فقط من قبل المستخدمين الفائقين: إذا كان الترحيل إلى بيئة لا تملك فيها امتيازات المستخدم الفائق، فقم بإزالة السمات مثل NOSUPERUSER ومن NOBYPASSRLS تفريغ الأدوار.

  • باستثناء المستخدمين الخاصين بالخدمة: استبعاد مستخدمي خدمة الخادم الفردي، مثل azure_superuser أو azure_pg_admin. هذه خاصة بالخدمة وسيتم إنشاؤها تلقائيا في البيئة الجديدة.

استخدم الأمر التالي sed لتنظيف تفريغ الأدوار:

sed -i '/azure_superuser/d; /azure_pg_admin/d; /azuresu/d; /^CREATE ROLE replication/d; /^ALTER ROLE replication/d; /^ALTER ROLE/ {s/NOSUPERUSER//; s/NOBYPASSRLS//;}' roles.sql

يحذف هذا الأمر الأسطر التي تحتوي على azure_superuserو azuresuazure_pg_adminو بدءا من CREATE ROLE replication وALTER ROLE replication، ويزيل NOSUPERUSER السمتين و NOBYPASSRLS من ALTER ROLE عبارات .

إنشاء ملف نسخة احتياطية يحتوي على البيانات المراد تحميلها

لتصدير قاعدة بيانات PostgreSQL الموجودة محليا أو في جهاز ظاهري إلى ملف برنامج نصي sql، قم بتشغيل الأمر التالي في بيئتك الحالية:

pg_dump <database name> -h <server name> -U <user name> > <database name>_dump.sql

على سبيل المثال، إذا كان لديك خادم يسمى mydemoserver، مستخدم يسمى myuser وقاعدة بيانات تسمى testdb، فقم بتشغيل الأمر التالي:

pg_dump testdb -h mydemoserver.postgres.database.azure.com -U myuser > testdb_dump.sql

إذا كنت تستخدم خادما واحدا، فإن اسم المستخدم الخاص بك يتضمن مكون اسم الخادم. لذلك، بدلا من myuser، استخدم myuser@mydemoserver.

استعادة البيانات في قاعدة البيانات الهدف

استعادة الأدوار والمستخدمين

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

لاستعادة الأدوار والمستخدمين في قاعدة البيانات الهدف، استخدم الأمر التالي:

psql -f roles.sql -h <server_name> -U <user_name>

استبدل <server_name> باسم الخادم الهدف واسم <user_name> المستخدم الخاص بك. يستخدم psql هذا الأمر الأداة المساعدة لتنفيذ أوامر SQL المضمنة roles.sql في الملف، واستعادة الأدوار والمستخدمين بشكل فعال إلى قاعدة البيانات الهدف.

على سبيل المثال، إذا كان لديك خادم يسمى mydemoserver، مستخدم يسمى myuser، فقم بتشغيل الأمر التالي:

psql -f roles.sql -h mydemoserver.postgres.database.azure.com -U myuser

إذا كنت تستخدم خادما واحدا، فإن اسم المستخدم الخاص بك يتضمن مكون اسم الخادم. لذلك، بدلا من myuser، استخدم myuser@mydemoserver.

إشعار

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

إنشاء مصدر بيانات جديد

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

  1. استخدام createdb الأداة المساعدةcreatedb يسمح البرنامج بإنشاء قاعدة البيانات مباشرة من سطر أوامر bash، دون الحاجة إلى تسجيل الدخول إلى PostgreSQL أو مغادرة بيئة نظام التشغيل. على سبيل المثال،

    createdb <new database name> -h <server name> -U <user name>
    

    على سبيل المثال، إذا كان لديك خادم يسمى mydemoserver، فإن المستخدم المسمى myuser وقاعدة البيانات الجديدة التي تريد إنشاؤها هي testdb_copy، فقم بتشغيل الأمر التالي:

    createdb testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser
    

    إذا كنت تستخدم خادما واحدا، فإن اسم المستخدم الخاص بك يتضمن مكون اسم الخادم. لذلك، بدلا من myuser، استخدم myuser@mydemoserver.

  2. باستخدام أمر SQL لإنشاء قاعدة بيانات باستخدام أمر SQL، ستحتاج إلى الاتصال بخادم PostgreSQL عبر واجهة سطر أوامر أو أداة إدارة قاعدة بيانات. بمجرد الاتصال، يمكنك استخدام أمر SQL التالي لإنشاء قاعدة بيانات جديدة:

CREATE DATABASE <new database name>;

استبدل <new database name> بالاسم الذي ترغب في منحه قاعدة البيانات الجديدة. على سبيل المثال، لإنشاء قاعدة بيانات باسم testdb_copy، سيكون الأمر:

CREATE DATABASE testdb_copy;

استعادة التفريغ

بعد إنشاء قاعدة البيانات الهدف، يمكنك استعادة البيانات إلى قاعدة البيانات هذه من ملف التفريغ. أثناء الاستعادة، سجل أي أخطاء في errors.log ملف وتحقق من محتواه بحثا عن أي أخطاء بعد إجراء الاستعادة.

psql -f <database name>_dump.sql <new database name> -h <server name> -U <user name> 2> errors.log

على سبيل المثال، إذا كان لديك خادم يسمى mydemoserver، مستخدم يسمى myuser وقاعدة بيانات جديدة تسمى testdb_copy، فقم بتشغيل الأمر التالي:

psql -f testdb_dump.sql testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser 2> errors.log

فحص ما بعد الاستعادة

بعد اكتمال عملية الاستعادة، من المهم مراجعة errors.log الملف لمعرفة أي أخطاء قد تكون حدثت. هذه الخطوة حاسمة لضمان سلامة واكتمال البيانات المستعادة. معالجة أي مشكلات تم العثور عليها في ملف السجل للحفاظ على موثوقية قاعدة البيانات الخاصة بك.

تحسين عملية الترحيل

عند العمل مع قواعد البيانات الكبيرة، يمكن أن تكون عملية التفريغ والاستعادة طويلة وقد تتطلب تحسينا لضمان الكفاءة والموثوقية. من المهم أن تكون على دراية بالعوامل المختلفة التي يمكن أن تؤثر على أداء هذه العمليات واتخاذ خطوات لتحسينها.

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

الخطوات التالية