ترحيل قاعدة بياناتك باستخدام النسخة الاحتياطية والاستعادة
ينطبق على: قاعدة بيانات Azure ل PostgreSQL - قاعدة بيانات Azure أحادية الخادم ل PostgreSQL - خادم مرن
يمكنك استخدام pg_dump لاستخراج قاعدة بيانات PostgreSQL في ملف نسخة احتياطية. تعتمد طريقة استعادة قاعدة البيانات على تنسيق النسخة الاحتياطية التي تختارها. إذا تم أخذ النسخة الاحتياطية الخاصة بك بتنسيق عادي (وهو الافتراضي -Fp
، لذلك لا يحتاج أي خيار محدد إلى تحديد)، فإن الخيار الوحيد لاستعادته هو باستخدام psql، لأنه يقوم بإخراج ملف نص عادي. بالنسبة لأساليب التفريغ الثلاثة الأخرى: مخصص ودليل و tar، يجب استخدام pg_restore .
هام
تم تصميم الإرشادات والأوامر المقدمة في هذه المقالة ليتم تنفيذها في محطات bash الطرفية. يتضمن ذلك بيئات مثل نظام Windows الفرعي لـ Linux (WSL) وAzure Cloud Shell وواجهات أخرى متوافقة مع bash. يرجى التأكد من أنك تستخدم محطة bash الطرفية لاتباع الخطوات وتنفيذ الأوامر المفصلة في هذا الدليل. قد يؤدي استخدام نوع مختلف من بيئة المحطة الطرفية أو بيئة shell إلى اختلافات في سلوك الأمر وقد لا ينتج النتائج المرجوة.
في هذه المقالة، نركز على تنسيقات عادية (افتراضية) ودليل. تنسيق الدليل مفيد لأنه يسمح لك باستخدام ذاكرات أساسية متعددة للمعالجة، والتي يمكن أن تعزز الكفاءة بشكل كبير، خاصة لقواعد البيانات الكبيرة.
يبسط مدخل Microsoft Azure هذه العملية عبر شفرة الاتصال من خلال تقديم أوامر تم تكوينها مسبقا مصممة خصيصا للخادم الخاص بك، مع قيم مستبدلة ببيانات المستخدم. من المهم ملاحظة أن شفرة الاتصال متاحة فقط لقاعدة بيانات Azure ل PostgreSQL - الخادم المرن وليس للخادم الفردي. فيما يلي كيفية استخدام هذه الميزة:
الوصول إلى مدخل Microsoft Azure: أولا، انتقل إلى مدخل Microsoft Azure واختر شفرة الاتصال.
حدد قاعدة البيانات الخاصة بك: في شفرة الاتصال، ستجد قائمة منسدلة لقواعد البيانات الخاصة بك. حدد قاعدة البيانات التي ترغب في إجراء تفريغ منها.
اختر الأسلوب المناسب: استنادا إلى حجم قاعدة البيانات، يمكنك الاختيار بين طريقتين:
pg_dump
-psql
باستخدام ملف نصي مفرد: مثالي لقواعد البيانات الأصغر، يستخدم هذا الخيار ملفا نصيا واحدا لعملية التفريغ والاستعادة.pg_dump
استخدامpg_restore
ذاكرات أساسية متعددة: بالنسبة لقواعد البيانات الأكبر حجما، تكون هذه الطريقة أكثر كفاءة لأنها تستخدم ذاكرات أساسية متعددة للتعامل مع عملية التفريغ والاستعادة.
أوامر النسخ واللصق: يوفر لك المدخل أوامر جاهزة للاستخدام
pg_dump
وpsql
أوpg_restore
. تأتي هذه الأوامر مع قيم تم استبدالها بالفعل وفقا للخادم وقاعدة البيانات التي اخترتها. انسخ هذه الأوامر والصقها.
المتطلبات الأساسية
إذا كنت تستخدم خادما واحدا، أو لم يكن لديك حق الوصول إلى مدخل Flexible Server، فاقرأ صفحة الوثائق هذه. يحتوي على معلومات مشابهة لما يتم تقديمه في شفرة الاتصال للخادم المرن على المدخل.
إشعار
نظرا لأن pg_dump
جميع psql
الأدوات المساعدة و pg_restore
و pg_dumpall
تعتمد على libpq، يمكنك استخدام أي من متغيرات البيئة المدعومة التي تقدمها، أو يمكنك استخدام ملف كلمة المرور لتجنب المطالبة بكلمة المرور في كل مرة تقوم فيها بتشغيل أي من هذه الأوامر.
للتقدم في هذا الدليل الإرشادي، تحتاج إلى:
- قاعدة بيانات Azure لخادم PostgreSQL، بما في ذلك قواعد جدار الحماية للسماح بالوصول.
- pg_dump وpsql pg_restore pg_dumpall في حالة رغبتك في الترحيل باستخدام الأدوار والأذونات، يتم تثبيت أدوات مساعدة سطر الأوامر.
- حدد موقع النسخة الاحتياطية: اختر المكان الذي تريد إجراء تفريغ منه. يمكن القيام بذلك من مواقع مختلفة، مثل جهاز ظاهري منفصل أو cloud shell (حيث تم تثبيت أدوات سطر الأوامر المساعدة بالفعل، ولكن قد لا تكون في الإصدار المناسب، لذلك تحقق دائما من الإصدار باستخدام، على سبيل المثال،
psql --version
)، أو الكمبيوتر المحمول الخاص بك. ضع في اعتبارك دائما المسافة وزمن الانتقال بين خادم PostgreSQL والموقع الذي تقوم بتشغيل التفريغ أو الاستعادة منه.
هام
من الضروري استخدام pg_dump
و psql
pg_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
و azuresu
azure_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
الإذن. فيما يلي طريقتان شائعتا الاستخدام:
استخدام
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
.باستخدام أمر 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 . يوفر هذا المورد معلومات واستراتيجيات شاملة يمكن أن تكون مفيدة للتعامل مع قواعد البيانات الكبيرة.
الخطوات التالية
- أفضل الممارسات pg_dump pg_restore.
- لمزيد من المعلومات حول ترحيل قواعد البيانات إلى قاعدة بيانات Azure ل PostgreSQL، يرجى مراجعةدليل ترحيل قاعدة البيانات.