ترحيل قاعدة بيانات PostgreSQL المحلية إلى Azure

مكتمل

بمجرد أن تتخذ الشركة قرارًا للانتقال إلى Azure Database for PostgreSQL، فإن الخطوة التالية هي التخطيط لكيفية ترحيل قواعد البيانات المحلية واختيار الأدوات اللازمة لنقل بياناتها.

بعد استكشاف كيفية دعم Azure Database for PostgreSQL لـ PostgreSQL وتغيير حجمها على Azure، فإنك الآن تريد التفكير في كيفية ترحيل قواعد البيانات المحلية الموجودة لديك.

في هذه الوحدة، ستتعرف على كيفية إنشاء مثيل من خدمة Azure Database for PostgreSQL باستخدام مدخل Microsoft Azure. إذا كنت بحاجة إلى إنشاء مثيلات كثيرة من هذه الخدمة، يمكنك كتابة العملية باستخدام CLI Azure.

إنشاء قاعدة بيانات Azure لخوادم PostgreSQL المرنة

في مدخل Microsoft Azure، اكتب قاعدة بيانات Azure لخوادم PostgreSQL المرنة في مربع البحث، وحدد قاعدة بيانات Azure لخوادم PostgreSQL المرنة.

Screenshot showing the Azure Database for PostgreSQL flexible servers item in the Azure portal.

حدد Create على الجزء الرئيسي للخادم المرن، وأدخل تفاصيل الخدمة. وتشمل هذه التفاصيل ما يلي:

  • مجموعة الموارد. مجموعة الموارد للخادم.

  • Server name. يجب أن يكون اسمًا فريدًا يتراوح بين 3 و63 حرفًا، ويحتوي فقط على أحرف صغيرة وأرقام وواصلات.

  • المنطقة. المنطقة للخادم.

  • إصدار PostgreSQL: حدد الإصدار الذي يتوافق مع قاعدة البيانات المحلية التي تقوم بترحيلها.

  • نوع حمل العمل. حدد الخيار استنادا إلى حمل العمل الخاص بك.

    • الحوسبة + التخزين حدد تكوين الخادم لتعيين طبقة التسعير وتحديد الموارد التي تحتاجها للخدمة. تم تناول الخيارات في الدرس 1. تذكر أنه إذا حددت General purpose أو مستويات التسعيرMemory optimized يمكنك زيادة عدد الذاكرات الأساسية للمعالج الظاهري وتقليصه لاحقًا. ومع ذلك، لا يمكنك تقليل مقدار التخزين، لا يمكن زيادتها إلا بعد إنشاء الخادم.
  • اسم المسؤول. اسم حساب المستخدم الذي ستنشئه بامتيازات إدارية. يقوم Azure بإنشاء بعض الحسابات لاستخدامه الخاص. لا يمكنك استخدام azure_superuser أو azure_pg_admin أو admin أو administrator أو root أو guest أو public أو أي اسم يبدأ بـ pg_.

  • Password. يجب أن يتراوح عدد الأحرف بين 8 و128 حرفًا. يجب أن يحتوي على مزيج من الأحرف الكبيرة والصغيرة والأرقام والأحرف غير الأبجدية الرقمية.

Screenshot showing a sample configuration for Azure Database for PostgreSQL flexible server in the Azure portal.

انقر فوق Review + Create لتوزيع الخدمة. سيستغرق النشر عدة دقائق.

بعد توزيع الخدمة، حدد الخيار Connection security وأضف قواعد جدار الحماية المناسبة لتمكين العملاء من الاتصال، كما هو موضح في موضوع اتصال العملاء في الدرس 1. يجب أيضًا تحديد الخيار السماح بالوصول إلى خدمات Azure .

إنشاء مثيلAzure Database for PostgreSQL باستخدام Azure CLI

يمكنك إنشاء مثيل منAzure Database for PostgreSQL باستخدام الأمر az postgres flexible-server create. تعرض العبارة أدناه مثالا ينشئ مثيل خادم مرن. تتسم معظم المعلمات بالوضوح في حد ذاتها، باستثناء ما يلي:

  • sku-name. يمكنك إنشاء هذا من مزيج من فئة التسعير الأساسية (B ترمز إلى Basic، وفئة التسعير للأغراض العامة (GP ترمز إلى General Purpose، وفئة تسعير الذاكرة المُحسَّنة MO ترمز إلى Memory Optimized)،وتوليد الحوسبة (Gen4 or Gen5)، وعدد الذاكرات الأساسية لمعالج CPU الظاهري. في المثال أدناه، يتم إنشاء الخادم باستخدام مستوى الأسعار General Purpose، مع 4 ذاكرات أساسية لمعالج CPU من الجيل Gen5.
  • storage-size. هذا هو مقدار مساحة تخزين على القرص المطلوبة، والمحددة بالميغابايت. يخصص المثال التالي 10 غيغابايت:
    az postgres flexible-server create \
    --location northeurope --resource-group testGroup \
    --name testserver --admin-user username --admin-password password \
    --sku-name Standard_B1ms --tier Burstable --public-access 153.24.26.117 --storage-size 128 \
    --tags "key=value" --version 13 --high-availability Enabled --zone 1 \
    --standby-zone 3
    

إجراء الترحيل عبر الإنترنت

يمكنك إجراء ترحيل عبر الإنترنت من تثبيت PostgreSQL المحلي إلى Azure Database for PostgreSQL باستخدام أداة Azure Database Migration Service.

في السيناريو عبر الإنترنت، تنسخ أداة Azure Database Migration Service جميع بياناتك الحالية إلى Azure، ثم تقوم بإجراء عملية مزامنة من قاعدة البيانات المصدر بشكل مستمر. يتم نسخ أي عمليات جديدة يتم إجراؤها على النظام المحلي إلى قاعدة البيانات الجديدة في Azure. تستمر هذه العملية حتى تقوم بإعادة تكوين تطبيقات العميل لاستخدام قاعدة البيانات الجديدة في Azure، وعند هذه النقطة تقوم بإنهاء عملية المزامنة.

تكوين الخادم المصدر وتصدير المخطط

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

wal_level = logical
max_replication_slots = 5
max_wal_senders = 10

بعد إعادة تشغيل الخادم، قم بتصدير مخطط قاعدة البيانات المصدر باستخدام الأداة المساعدة pg_dump:

pg_dump -o -h [server host] -U [user name] -d [database name] -s > db_schema.sql

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

SELECT *
FROM pg_extension;

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

تتمثل المرحلة التالية في إنشاء قاعدة بيانات هدف في خدمة Azure Database for PostgreSQL. يمكنك استخدام أداة مألوفة مثل pgAdmin للاتصال بالخادم، أو يمكنك استخدام Azure CLI في المثال التالي:

az postgres db create \
  --name [database name] \
  --server-name [server name] \
  --resource-group [azure resource group]

في قاعدة البيانات الهدف، قم بتمكين أي ملحقات تستخدمها قاعدة بيانات المصادر.

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

psql -h [Azure Database for PostgreSQL host] -U [user name] -d [database name] -f db_schema.sql

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

SELECT Queries.tablename
       ,concat('alter table ', Queries.tablename, ' ', STRING_AGG(concat('DROP CONSTRAINT ', Queries.foreignkey), ',')) as DropQuery
            ,concat('alter table ', Queries.tablename, ' ',
                                            STRING_AGG(concat('ADD CONSTRAINT ', Queries.foreignkey, ' FOREIGN KEY (', column_name, ')', 'REFERENCES ', foreign_table_name, '(', foreign_column_name, ')' ), ',')) as AddQuery
    FROM
    (SELECT
    tc.table_schema,
    tc.constraint_name as foreignkey,
    tc.table_name as tableName,
    kcu.column_name,
    ccu.table_schema AS foreign_table_schema,
    ccu.table_name AS foreign_table_name,
    ccu.column_name AS foreign_column_name
FROM
    information_schema.table_constraints AS tc
    JOIN information_schema.key_column_usage AS kcu
      ON tc.constraint_name = kcu.constraint_name
      AND tc.table_schema = kcu.table_schema
    JOIN information_schema.constraint_column_usage AS ccu
      ON ccu.constraint_name = tc.constraint_name
      AND ccu.table_schema = tc.table_schema
WHERE constraint_type = 'FOREIGN KEY') Queries
  GROUP BY Queries.tablename;

تعطيل أي مشغلات في قاعدة البيانات الهدف، يوجد سببان لذلك:

  • يساعد على تحسين عملية الترحيل حيث يتم نسخ البيانات.
  • غالبًا ما تُستخدم المشغلات لتنفيذ أشكال معقدة من تكامل البيانات المرجعي، وللأسباب الموضحة سابقًا، قد يفشل هذا النوع من فحص التكامل في أثناء نقل البيانات. استخدم عبارة SQL التالية للعثور على جميع المشغلات في قاعدة البيانات الخاصة بك وإنشاء برنامج نصي يعطلها:
    SELECT concat ('alter table ', event_object_table, ' disable trigger ', trigger_name)
    FROM information_schema.triggers;
    

إشعار

يمكنك العثور على نص المشغل باستخدام الأمر \df+ في psql.

إنشاء مثيل Azure Database Migration Service

في مدخل Microsoft Azure، يمكنك الآن إنشاء مثيل لأداة Azure Database Migration Service.

قبل إنشاء مثيل لأداة Azure Database Migration Service، يجب عليك تسجيل موفر موارد Microsoft.DataMigration مع اشتراكك. يمكنك القيام بذلك كما يلي:

  1. في شريط القوائم في الجانب الأيمن من مدخل Microsoft Azure، حَدِد جميع الخدمات.
  2. في صفحة جميع الخدمات، حدد الاشتراكات.
  3. في صفحة الاشتراكات، حدد اشتراكك.
  4. في صفحة الاشتراك، ضِمن قِسم الإعدادات، حدِد مُقدِمي الموارد.
  5. في المربع تصفية حسب الاسم، اكتب DataMigration، ثم حدد Microsoft.DataMigration.
  6. حدد Register، وانتظر حتى تتغير Status إلى Registered. قد تحتاج إلى تحديد Refresh لمعرفة الحالة التي تريد تغييرها.
    Image showing the Resource providers page. The user is registering the Microsoft.DataMigration resource provider

عندما يتم تسجيل موفر المورد، يمكنك إنشاء الخدمة. حدِد الأمر Create a resource في شريط القوائم في الجانب الأيسر، ثم ابحث عن Azure Database Migration Service.

Image showing the initial page when creating the Azure Database Migration Service

في الصفحة Create Migration Service، أدخل اسمًا لمثيل الخدمة لديك، وحدد الاشتراك، يجب أن يكون هذا الاشتراك هو نفس الاشتراك الذي قمت بتسجيله مقابل مجموعة الموارد الخاصة بموفر الموارد والموقع. يجب أيضًا توفير شبكة اتصال ظاهرية لأن Database Migration Service تعتمد على جدار حماية تم إنشاؤها لهذه الشبكة الظاهرية لتوفير الحماية الضرورية. إذا كنت تقوم بترحيل قواعد البيانات من الأجهزة الظاهرية Azure، فقد تتمكن من وضع خدمة Database Migration Service في نفس الشبكة الظاهرية التي تستخدمها هذه الأجهزة الظاهرية. يحدد مستوى التسعير عدد الذاكرات الأساسية للمعالج الظاهري المتوفرة للخدمة. إذا كنت ترغب في إجراء ترحيل عبر الإنترنت، يجب عليك تحديد مستوى Premium؛ يدعم المستوى Standard الترحيل في وضع عدم الاتصال فقط.

Image showing the configuration for the Azure Database Migration Service. The user has selected the Premium pricing tier

انتظر حتى يتم نشر الخدمة قبل الاستمرار. هذه العملية ستستغرق بضع دقائق.

إنشاء مشروع ترحيل باستخدام خدمة Database Migration Service

يمكنك الآن استخدام مثيل خدمة Database Migration Service لإجراء ترحيل عبر الإنترنت. للقيام بذلك، يمكنك إنشاء مشروع ترحيل قاعدة بيانات جديد. انتقل إلى الصفحة الخاصة بمثيل خدمة الترحيل وحدد مشروع ترحيل جديد.

Image showing the newly created Azure Database Migration Service.

في صفحة New migration project، قم بتعيين نوع الخادم المصدر إلى PostgreSQL، وقم بتعيين نوع الخادم المستهدف إلى Azure Database for PostgreSQL، وحدد Online data migration. تسرد صفحة نوع النشاط الخطوات التي يجب اتخاذها على الخادم المصدر لتمكين الترحيل عبر الإنترنت. يصف النص الموجود في أسفل صفحة مشروع ترحيل جديد عملية ترحيل المخطط إلى الهدف.

Image showing the migration project properties and instructions.

تحقق من أنك قد أكملت هذه الخطوات، ثم حدد Create and run activity.

إنشاء نشاط ترحيل وتشغيله

يبدأ مشروع الترحيل الجديد بتشغيل معالج يرشدك في طريقك لتنفيذ العملية. يمكنك توفير التفاصيل التالية:

  • في صفحة Add Source Details عنوان الخادم المصدر وقاعدة البيانات المصدر والحساب الذي يمكنه الاتصال بقاعدة البيانات هذه واسترداد البيانات. يجب أن تكون للحساب امتيازات المستخدم المُتميِز لتنفيذ الترحيل.
  • في صفحة Target details، حدد عنوان خدمة Azure Database for PostgreSQL وقاعدة البيانات التي تريد ترحيل البيانات إليها، وتفاصيل حساب له حقوق إدارية.
  • في صفحة Map to target databases حدد قاعدة البيانات المصدر وقاعدة البيانات الهدف. يمكنك ترحيل قاعدة بيانات واحدة أو عِدة قواعد بيانات.
  • في الصفحة Migration settings، حدد أي إعدادات إضافية تريد تكوينها، مثل الحد الأقصى لعدد الجداول التي يجب تحميلها في نفس الوقت.
  • في صفحة Migration summary، أدخل اسمًا للنشاط، ثم حدد Run migration.
    Image showing the migration summary page.

تظهر صفحة حالة النشاط التي تُظهِر تقدُم الترحيل، وأي أخطاء حدثت. إذا فشل الترحيل، يمكنك تصحيح المشكلات وإعادة محاولة النشاط. إذا كنت تقوم بإجراء ترحيل عبر الإنترنت، تتغير الحالة إلى Ready to cutover بعد نقل البيانات الموجودة. ومع ذلك، يستمر النشاط قيد التشغيل، لنقل أي تغييرات إضافية تظهر في حين أن التطبيقات لا تزال تستخدم قاعدة البيانات الأصلية.

Image showing the activity status page for the migration activity. The migration has transferred all the current data, and is ready to cutover to the new database.

إعادة المفاتيح الخارجية والمشغلات

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

الانتقال إلى قاعدة البيانات الجديدة

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

Image showing the statistics for the migration activity.

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

Image of the Complete cutover page.

إجراء الترحيل دون اتصال بالإنترنت

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

لديك خياران على الأقل إذا كنت تريد إجراء ترحيل دون اتصال إلىAzure Database for PostgreSQL، أو إلى خادم PostgreSQL يعمل في مكان آخر، مثل الجهاز الظاهري لـ Azure:

  • قم بتصدير المخطط والبيانات من قاعدة البيانات المصدر باستخدام الأداة المساعدة pg_dump، واستيراد المخطط والبيانات إلى قاعدة البيانات الهدف باستخدام الأداة المساعدة psql. تمكنك هذه التقنية من تعديل وإعادة تنسيق وتنظيف المخطط والبيانات إذا لزم الأمر، قبل نقلها إلى قاعدة البيانات الهدف.
  • تفريغ البيانات من قاعدة البيانات المصدر، مرة أخرى باستخدام pg_dump، واستعادة البيانات إلى قاعدة البيانات الهدف باستخدام pg_restore. هذه التقنية أسرع من استخدام التصدير والاستيراد، ولكن يتم تفريغ البيانات بتنسيق لا يمكن تغييره بسهولة. استخدم هذا الأسلوب إذا لم تكن بحاجة إلى تعديل المخطط أو البيانات.

إشعار

لا يمكنك حاليًا استخدام خدمة Azure Database Migration Service لإجراء ترحيل غير متصل بقاعدة بيانات PostgreSQL.

ترحيل باستخدام التصدير والاستيراد

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

  1. تصدير المخطط باستخدام الأمر pg_dump من موجه bash:

    pg_dump -o -h [source database server] -U [user name] -d [database] -s > db_schema.sql
    
  2. تصدير البيانات إلى ملف آخر باستخدام الأمر pg_dump:

    pg_dump -o -h [source database server] -U [user name] -d [database] -a > db_data.sql
    

    في هذه المرحلة، يعد db_schema.sql وdb_data.sql برنامجين نصيَّين لـ SQL تقوم بتعديلها باستخدام محرر نصوص.

  3. قم بإنشاء قاعدة بيانات الهدف في Azure Database for PostgreSQL. يمكنك القيام بذلك باستخدام CLI Azure:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group]
    
  4. يمكنك استيراد المخطط إلى قاعدة البيانات الهدف باستخدام الأمر psql:

    psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_schema.sql
    
  5. يمكنك استيراد البيانات إلى قاعدة البيانات الهدف باستخدام الأمر psql:

    psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_data.sql
    

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

تصف هذه الخطوات عملية ترحيل قاعدة بيانات باستخدام النسخ الاحتياطي والاستعادة.

  1. قم بإجراء نسخة احتياطية لقاعدة البيانات، من خلال موجه bash، ثم قم بتشغيل الأمر التالي. حدد اسم المستخدم الذي لديه الامتيازات اللازمة لإجراء نسخة احتياطية من قاعدة البيانات:

    pg_dump [database name] -h [source database server] -U [user name] -Fc > database_backup.bak
    
  2. قم بإنشاء قاعدة البيانات الهدف في Azure Database for PostgreSQL:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group] \
    
  3. قم باستعادة النسخة الاحتياطية إلى قاعدة البيانات الجديدة باستخدام الأمر pg_restore من موجه bash. حدد اسم مستخدم يتمتع بحقوق إدارية في خدمة Azure Database for PostgreSQL:

    pg_restore -d [target database name] -h [server name in Azure Database for PostgreSQL] -Fc -U [user name] database_backup.bak