مشاركة عبر


النسخ الاحتياطي لقواعد بيانات PostgreSQL باستخدام Azure CLI

توضح هذه المقالة كيفية إجراء نسخ احتياطي لقواعد بيانات PostgreSQL في أجهزة Azure الظاهرية باستخدام Azure CLI. يمكنك أيضا تكوين النسخ الاحتياطي باستخدام مدخل Microsoft AzureوAzure PowerShellوواجهة برمجة تطبيقات REST لقواعد بيانات PostgreSQL.

تعرف على المزيد حول السيناريوهات المدعومةوالأسئلة المتداولة للنسخ الاحتياطي لقاعدة بيانات Azure ل PostgreSQL.

إنشاء مخزن للنسخ الاحتياطي

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

قبل إنشاء مخزن النسخ الاحتياطي، اختر تخزين البيانات الزائدة داخل المخزن. ثم تابع إنشاء مخزن النسخ الاحتياطي مع هذا التخزين الاحتياطي والموقع.

في هذه المقالة، يمكنك إنشاء مخزن النسخ الاحتياطي باسم TestBkpVault، في westus المنطقة، ضمن مجموعة testBkpVaultRGالموارد . az dataprotection vault create استخدم الأمر لإنشاء مخزن النسخ الاحتياطي. تعرف على المزيد حول إنشاء مخزن النسخ الاحتياطي.

az dataprotection backup-vault create -g testBkpVaultRG --vault-name TestBkpVault -l westus --type SystemAssigned --storage-settings datastore-type="VaultStore" type="LocallyRedundant"

{
  "eTag": null,
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/testBkpVaultRG/providers/Microsoft.DataProtection/BackupVaults/TestBkpVault",
  "identity": {
    "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "type": "SystemAssigned"
  },
  "location": "westus",
  "name": "TestBkpVault",
  "properties": {
    "provisioningState": "Succeeded",
    "storageSettings": [
      {
        "datastoreType": "VaultStore",
        "type": "LocallyRedundant"
      }
    ]
  },
  "resourceGroup": "testBkpVaultRG",
  "systemData": null,
  "tags": null,
  "type": "Microsoft.DataProtection/backupVaults"
}

إنشاء سياسة النسخ احتياطي

بعد إنشاء مخزن، يمكنك إنشاء نهج نسخ احتياطي للمساعدة في حماية قواعد بيانات PostgreSQL. يمكنك أيضا إنشاء نهج نسخ احتياطي لقواعد بيانات PostgreSQL باستخدام واجهة برمجة تطبيقات REST.

فهم نهج النسخ الاحتياطي PostgreSQL

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

في هذا السياق، يمكن أن يساعدك التسلسل الهرمي التالي على فهم كائن نهج النسخ الاحتياطي ل PostgreSQL:

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

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

يشير عنصر PowerShell الافتراضي ل PostgreSQL إلى تشغيل نسخة احتياطية كاملة كل أسبوع. تصل النسخ الاحتياطية إلى المخزن، حيث يتم تخزينها لمدة ثلاثة أشهر.

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

الكائن PowerShell الناتجة كما يلي:

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

استرداد قالب النهج

لفهم المكونات الداخلية لنهج النسخ الاحتياطي للنسخ الاحتياطي لقاعدة بيانات PostgreSQL، قم باسترداد قالب النهج باستخدام az dataprotection backup-policy get-default-policy-template الأمر . يقوم هذا الأمر بإرجاع قالب النهج الافتراضي لنوع مصدر بيانات. استخدم قالب النهج هذا لإنشاء نهج جديد.

az dataprotection backup-policy get-default-policy-template --datasource-type AzureDatabaseForPostgreSQL
{
  "datasourceTypes": [
    "Microsoft.DBforPostgreSQL/servers/databases"
  ],
  "name": "OssPolicy1",
  "objectType": "BackupPolicy",
  "policyRules": [
    {
      "backupParameters": {
        "backupType": "Full",
        "objectType": "AzureBackupParams"
      },
      "dataStore": {
        "dataStoreType": "VaultStore",
        "objectType": "DataStoreInfoBase"
      },
      "name": "BackupWeekly",
      "objectType": "AzureBackupRule",
      "trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T06:30:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        },
        "taggingCriteria": [
          {
            "isDefault": true,
            "tagInfo": {
              "id": "Default_",
              "tagName": "Default"
            },
            "taggingPriority": 99
          }
        ]
      }
    },
    {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }
  ]
}

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

مشغل مجدول

"trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2021-08-15T06:30:00+00:00/P1W"
          ],
          "timeZone": "UTC"
        }

دورة الحياة الافتراضية لقاعدة الاحتجاز

 {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P3M",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "VaultStore",
            "objectType": "DataStoreInfoBase"
          },
          "targetDataStoreCopySettings": []
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }

تعديل قالب النهج

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

تعديل الجدول

يقدم قالب النهج الافتراضي نسخة احتياطية مرة واحدة في الأسبوع. يمكنك تعديل الجدول الزمني للنسخ الاحتياطي ليحدث عدة أيام في الأسبوع. لتعديل الجدول، استخدم az dataprotection backup-policy trigger set الأمر .

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

az dataprotection backup-policy trigger create-schedule --interval-type Weekly --interval-count 1 --schedule-days 2021-08-15T22:00:00 2021-08-18T22:00:00 2021-08-20T22:00:00
[
  "R/2021-08-15T22:00:00+00:00/P1W",
  "R/2021-08-18T22:00:00+00:00/P1W",
  "R/2021-08-20T22:00:00+00:00/P1W"
]

az dataprotection backup-policy trigger set --policy .\OSSPolicy.json  --schedule R/2021-08-15T22:00:00+00:00/P1W R/2021-08-18T22:00:00+00:00/P1W R/2021-08-20T22:00:00+00:00/P1W > EditedOSSPolicy.json

إضافة قاعدة استبقاء جديدة

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

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

أيضا، يجب أن تحدد القاعدة المدة للاحتفاظ بالبيانات في مخزن بيانات الأرشيف. لإنشاء دورات حياة جديدة، استخدم az dataprotection backup-policy retention-rule create-lifecycle الأمر . لربط دورات الحياة هذه بقواعد جديدة أو موجودة، استخدم az dataprotection backup-policy retention-rule set الأمر .

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

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 6 --retention-duration-type Months --source-datastore VaultStore --target-datastore ArchiveStore --copy-option CopyOnExpiryOption > VaultToArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 24 --retention-duration-type Months -source-datastore ArchiveStore > OnArchiveLifeCycle.JSON

az dataprotection backup-policy retention-rule set --lifecycles .\VaultToArchiveLifeCycle.JSON .\OnArchiveLifeCycle.JSON --name Monthly --policy .\EditedOSSPolicy.JSON > AddedRetentionRulePolicy.JSON

إضافة علامة والمعايير ذات الصلة

بعد إنشاء قاعدة استبقاء، يجب عليك إنشاء علامة مقابلة في Trigger خاصية نهج النسخ الاحتياطي. لإنشاء معايير وضع علامات جديدة، استخدم az dataprotection backup-policy tag create-absolute-criteria الأمر . لتحديث العلامة الموجودة أو إنشاء علامة جديدة، استخدم az dataprotection backup-policy tag set الأمر .

ينشئ المثال التالي علامة جديدة مع المعايير، وهي أول نسخة احتياطية ناجحة من الشهر. العلامة لها نفس اسم قاعدة استبقاء البيانات المقابلة ليتم تطبيقها.

في هذا المثال، تسمى Monthlyمعايير العلامة :

az dataprotection backup-policy tag create-absolute-criteria --absolute-criteria FirstOfMonth > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

إذا كان الجدول الزمني هو عدة نسخ احتياطية في الأسبوع (كل يوم أحد وأربعاء وخميس، كما هو محدد في المثال السابق) وتريد أرشفة النسخ الاحتياطية الأحد والجمعة، يمكنك تغيير معايير وضع العلامات باستخدام az dataprotection backup-policy tag create-generic-criteria الأمر :

az dataprotection backup-policy tag create-generic-criteria --days-of-week Sunday Friday > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON

إنشاء نهج النسخ احتياطي PostgreSQL جديد

بعد تعديل القالب وفقا للمتطلبات، استخدم az dataprotection backup-policy create الأمر لإنشاء نهج باستخدام القالب المعدل:

az dataprotection backup-policy create --backup-policy-name FinalOSSPolicy --policy AddedRetentionRuleAndTag.JSON --resource-group testBkpVaultRG --vault-name TestBkpVault

تكوين النسخ الاحتياطي

بعد إنشاء المخزن والنهج، تحتاج إلى النظر في ثلاث نقاط هامة لإجراء نسخ احتياطي لقاعدة بيانات PostgreSQL في قاعدة بيانات Azure ل PostgreSQL.

فهم الكيانات الرئيسية

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

إحضار معرف Resource Manager لقاعدة بيانات PostgreSQL ليتم نسخها احتياطيا. يعمل هذا المعرف كمعرف لقاعدة البيانات. يستخدم المثال التالي قاعدة بيانات باسم empdb11 ضمن خادم testposgresqlPostgreSQL ، الموجودة في مجموعة ossrg الموارد ضمن اشتراك مختلف. يستخدم المثال Bash.

ossId="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"

Key Vault

لا تخزن خدمة Azure Backup اسم المستخدم وكلمة المرور للاتصال بقاعدة بيانات PostgreSQL. بدلا من ذلك، يقوم مسؤول النسخ الاحتياطي بزرع المفاتيح في مخزن المفاتيح. ثم تصل خدمة Azure Backup إلى مخزن المفاتيح، وتقرأ المفاتيح، وتدخل إلى قاعدة البيانات.

يستخدم المثال التالي Bash. لاحظ المعرف السري للمفتاح ذي الصلة.

keyURI="https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"

مخزن النسخ الاحتياطي

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

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

إعداد الطلب

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

  1. قم بإعداد الطلب باستخدام المخزن والنهج وقاعدة بيانات PostgreSQL ذات الصلة في az dataprotection backup-instance initialize الأمر.
  2. أرسل الطلب لنسخ قاعدة البيانات احتياطيا az dataprotection backup-instance create باستخدام الأمر .
az dataprotection backup-instance initialize --datasource-id $ossId --datasource-type AzureDatabaseForPostgreSQL -l <vault-location> --policy-id <policy_arm_id>  --secret-store-type AzureKeyVault --secret-store-uri $keyURI > OSSBkpInstance.JSON

az dataprotection backup-instance create --resource-group testBkpVaultRG --vault-name TestBkpVault TestBkpvault --backup-instance .\OSSBkpInstance.JSON

ثم قم بإجراء النسخ الاحتياطي حسب الطلب

يجب عليك تحديد قاعدة استبقاء أثناء تشغيل النسخ الاحتياطي. لعرض قواعد الاستبقاء في نهج، استعرض ملف JSON للنهج. في المثال التالي، هناك قاعدتان للاحتفاظ بالأسماء Default و Monthly. تستخدم Monthly هذه المقالة قاعدة النسخ الاحتياطي عند الطلب.

az dataprotection backup-policy show  -g ossdemorg --vault-name ossdemovault-1 --subscription e3d2d341-4ddb-4c5d-9121-69b7e719485e --name osspol5
{
  "id": "/subscriptions/e3d2d341-4ddb-4c5d-9121-69b7e719485e/resourceGroups/ossdemorg/providers/Microsoft.DataProtection/backupVaults/ossdemovault-1/backupPolicies/osspol5",
  "name": "osspol5",
  "properties": {
    "datasourceTypes": [
      "Microsoft.DBforPostgreSQL/servers/databases"
    ],
    "objectType": "BackupPolicy",
    "policyRules": [
      {
        "backupParameters": {
          "backupType": "Full",
          "objectType": "AzureBackupParams"
        },
        "dataStore": {
          "dataStoreType": "VaultStore",
          "objectType": "DataStoreInfoBase"
        },
        "name": "BackupWeekly",
        "objectType": "AzureBackupRule",
        "trigger": {
          "objectType": "ScheduleBasedTriggerContext",
          "schedule": {
            "repeatingTimeIntervals": [
              "R/2020-04-04T20:00:00+00:00/P1W",
              "R/2020-04-01T20:00:00+00:00/P1W"
            ],
            "timeZone": "UTC"
          },
          "taggingCriteria": [
            {
              "criteria": [
                {
                  "absoluteCriteria": [
                    "FirstOfMonth"
                  ],
                  "daysOfMonth": null,
                  "daysOfTheWeek": null,
                  "monthsOfYear": null,
                  "objectType": "ScheduleBasedBackupCriteria",
                  "scheduleTimes": null,
                  "weeksOfTheMonth": null
                }
              ],
              "isDefault": false,
              "tagInfo": {
                "eTag": null,
                "id": "Monthly_",
                "tagName": "Monthly"
              },
              "taggingPriority": 15
            },
            {
              "criteria": null,
              "isDefault": true,
              "tagInfo": {
                "eTag": null,
                "id": "Default_",
                "tagName": "Default"
              },
              "taggingPriority": 99
            }
          ]
        }
      },
      {
        "isDefault": false,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P10Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Monthly",
        "objectType": "AzureRetentionRule"
      },
      {
        "isDefault": true,
        "lifecycles": [
          {
            "deleteAfter": {
              "duration": "P1Y",
              "objectType": "AbsoluteDeleteOption"
            },
            "sourceDataStore": {
              "dataStoreType": "VaultStore",
              "objectType": "DataStoreInfoBase"
            },
            "targetDataStoreCopySettings": []
          }
        ],
        "name": "Default",
        "objectType": "AzureRetentionRule"
      }
    ]
  },
  "resourceGroup": "ossdemorg",
  "systemData": null,
  "type": "Microsoft.DataProtection/backupVaults/backupPolicies"
}

لتشغيل نسخة احتياطية عند الطلب، استخدم az dataprotection backup-instance adhoc-backup الأمر :

az dataprotection backup-instance adhoc-backup --name "ossrg-empdb11" --rule-name "Monthly" --resource-group testBkpVaultRG --vault-name TestBkpVault

تتبع الوظائف

تعقب جميع المهام باستخدام az dataprotection job list الأمر . يمكنك سرد جميع الوظائف وجلب تفاصيل مهمة معينة.

يمكنك أيضا استخدام Az.ResourceGraph لتعقب جميع المهام عبر جميع خزائن النسخ الاحتياطي. az dataprotection job list-from-resourcegraph استخدم الأمر لجلب المهام ذات الصلة عبر خزائن النسخ الاحتياطي:

az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --status Completed