ملاحظة
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
توضح هذه المقالة كيفية استخدام Azure CLI لاستعادة قواعد بيانات PostgreSQL إلى قاعدة بيانات Azure لخادم PostgreSQL الذي قمت بنسخه احتياطيا عبر Azure Backup. يمكنك أيضا استعادة قاعدة بيانات PostgreSQL باستخدام مدخل Microsoft AzureوAzure PowerShellوواجهة برمجة تطبيقات REST.
نظرا لأن قاعدة بيانات PostgreSQL هي قاعدة بيانات النظام الأساسي كخدمة (PaaS)، فإن خيار Original-Location Recovery (OLR) لاستعادته عن طريق استبدال قاعدة البيانات الموجودة (من حيث تم أخذ النسخ الاحتياطية) غير مدعوم. يمكنك الاستعادة من نقطة استرداد لإنشاء قاعدة بيانات جديدة في نفس قاعدة بيانات Azure لخادم PostgreSQL أو في أي خادم PostgreSQL آخر. يسمى هذا الخيار Alternate-Location Recovery (ALR). يساعد ALR على الاحتفاظ بكل من قاعدة البيانات المصدر وقاعدة البيانات المستعادة (الجديدة).
تشير الأمثلة في هذه المقالة إلى مخزن النسخ الاحتياطي الموجود المسمى TestBkpVault
ضمن مجموعة testBkpVaultRG
الموارد .
استعادة قاعدة بيانات PostgreSQL المزودة بنسخة احتياطية
إعداد الأذونات
يستخدم مخزن النسخ الاحتياطي هوية مدارة للوصول إلى موارد Azure الأخرى. للاستعادة من نسخة احتياطية، تتطلب الهوية المدارة لمخزن النسخ الاحتياطي مجموعة من الأذونات على قاعدة بيانات Azure لخادم PostgreSQL الذي يجب استعادة قاعدة البيانات إليه.
لتعيين الأذونات ذات الصلة للهوية المدارة المعينة من قبل النظام للمخزن على خادم PostgreSQL الهدف، راجع مجموعة الأذونات اللازمة لإجراء نسخ احتياطي لقاعدة بيانات PostgreSQL.
لاستعادة نقطة الاسترداد كملفات إلى حساب تخزين، تحتاج الهوية المدارة المعينة من قبل النظام إلى الوصول إلى حساب التخزين المستهدف.
إحضار نقطة الاسترداد ذات الصلة
لسرد جميع مثيلات النسخ الاحتياطي داخل المخزن، استخدم az dataprotection backup-instance list
الأمر . ثم قم بإحضار المثيل ذي الصلة باستخدام az dataprotection backup-instance show
الأمر .
بدلا من ذلك، بالنسبة للسيناريوهات على نطاق واسع ، يمكنك سرد مثيلات النسخ الاحتياطي عبر الخزائن والاشتراكات باستخدام az dataprotection backup-instance list-from-resourcegraph
الأمر :
az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL -subscriptions "xxxxxxxx-xxxx-xxxx-xxxx"
{
"datasourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql/databases/empdb11",
"extendedLocation": null,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"identity": null,
"kind": "",
"location": "",
"managedBy": "",
"name": "testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"plan": null,
"properties": {
"currentProtectionState": "ProtectionConfigured",
"dataSourceInfo": {
"baseUri": null,
"datasourceType": "Microsoft.DBforPostgreSQL/servers/databases",
"objectType": "Datasource",
"resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql/databases/empdb11",
"resourceLocation": "westus",
"resourceName": "postgres",
"resourceProperties": null,
"resourceType": "Microsoft.DBforPostgreSQL/servers/databases",
"resourceUri": ""
},
"dataSourceProperties": null,
"dataSourceSetInfo": {
"baseUri": null,
"datasourceType": "Microsoft.DBforPostgreSQL/servers/databases",
"objectType": "DatasourceSet",
"resourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/servers/testpostgresql",
"resourceLocation": "westus",
"resourceName": "testpostgresql",
"resourceProperties": null,
"resourceType": "Microsoft.DBforPostgreSQL/servers",
"resourceUri": ""
},
"datasourceAuthCredentials": {
"objectType": "SecretStoreBasedAuthCredentials",
"secretStoreResource": {
"secretStoreType": "AzureKeyVault",
"uri": "https://vikottur-test.vault.azure.net/secrets/dbauth3",
"value": null
}
},
"friendlyName": "testpostgresql\\empdb11",
"objectType": "BackupInstance",
"policyInfo": {
"policyId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupPolicies/osspol3",
"policyParameters": null,
"policyVersion": ""
},
"protectionErrorDetails": null,
"protectionStatus": {
"errorDetails": null,
"status": "ProtectionConfigured"
},
"provisioningState": "Succeeded",
"validationType": null
},
"protectionState": "ProtectionConfigured",
"resourceGroup": "testBkpVaultRG",
"sku": null,
"subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tags": null,
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "microsoft.dataprotection/backupvaults/backupinstances",
"vaultName": "testBkpVault",
"zones": null
}
.
.
.
.
.
بعد تحديد المثيل، أحضر نقطة الاسترداد ذات الصلة باستخدام az dataprotection recovery-point list
الأمر :
az dataprotection recovery-point list --backup-instance-name testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e -g testBkpVaultRG --vault-name TestBkpVault
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/recoveryPoints/9da55e757af94261afa009b43cd3222a",
"name": "9da55e757af94261afa009b43cd3222a",
"properties": {
"friendlyName": "2031fdb43a914114b6ce644eb6fcb5ce",
"objectType": "AzureBackupDiscreteRecoveryPoint",
"policyName": "oss-clitest-policy",
"policyVersion": null,
"recoveryPointDataStoresDetails": [
{
"creationTime": "2021-09-13T15:17:41.209845+00:00",
"expiryTime": null,
"id": "beddea84-7b30-42a5-a752-7c75baf96a52",
"metaData": "{\"objectType\":\"PostgresBackupMetadata\",\"version\":\"1.0\",\"postgresVersion\":\"11\",\"dbName\":\"postgres\",\"serverName\":\"testpostgresql\",\"serverFQDN\":\"testpostgresql.postgres.database.azure.com\",\"usernameUsed\":\"backupadmin@testpostgresql\",\"backupToolPath\":\"postgresql-11.6-1\\\\bin\\\\pg_dump.exe\",\"backupType\":\"Full\",\"backupDumpFormat\":\"CUSTOM\",\"backupToolArgsFormat\":\"--no-acl --no-owner --serializable-deferrable --no-tablespaces --quote-all-identifiers -Fc -d postgres://{0}:{1}@{2}:5432/{3}?sslmode=verify-full&sslrootcert=E:\\\\approot\\\\Plugins\\\\Postgres\\\\..\\\\..\\\\postgres-root.crt\",\"storageUnits\":{\"1\":\"DbBackupDumpData\"},\"streamNamesInFirstStorageUnit\":[\"dbbkpdmpdatastream-1631546260050\"],\"pitId\":\"2031fdb43a914114b6ce644eb6fcb5ce\",\"bytesTransferred\":2063,\"dataSourceSize\":8442527,\"backupToolVersion\":\"11\"}",
"rehydrationExpiryTime": null,
"rehydrationStatus": null,
"state": "COMMITTED",
"type": "VaultStore",
"visible": true
}
],
"recoveryPointId": "9da55e757af94261afa009b43cd3222a",
"recoveryPointTime": "2021-09-13T15:17:41.209845+00:00",
"recoveryPointType": "Full",
"retentionTagName": "default",
"retentionTagVersion": "637671427933449525"
},
"resourceGroup": "testBkpVaultRG",
"systemData": null,
"type": "Microsoft.DataProtection/backupVaults/backupInstances/recoveryPoints"
}
إذا كنت بحاجة إلى إحضار نقطة الاسترداد من طبقة الأرشيف، فإن type
المتغير في recoveryPointDataStoreDetails
هو ArchiveStore
.
تجهيز طلب الاستعادة
هناك خيارات استعادة مختلفة لقاعدة بيانات PostgreSQL. يمكنك استعادة نقطة الاسترداد كقاعدة بيانات أخرى أو استعادة كملفات. يمكن أن تكون نقطة الاسترداد أيضا على مستوى الأرشيف.
الاستعادة كقاعدة بيانات
إنشاء معرف Azure Resource Manager لقاعدة بيانات PostgreSQL الجديدة باستخدام خادم PostgreSQL الهدف الذي قمت بتعيين الأذونات له. أيضاً، أنشئ اسم قاعدة بيانات PostgreSQL المطلوب. على سبيل المثال، يمكن تسمية emprestored21
قاعدة بيانات PostgreSQL ضمن خادم PostgreSQL الهدف المسمى targetossserver
في مجموعة targetrg
الموارد مع اشتراك مختلف:
$targetOssId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21"
az dataprotection backup-instance restore initialize-for-data-recovery
استخدم الأمر لإعداد طلب الاستعادة مع جميع التفاصيل ذات الصلة:
az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureDatabaseForPostgreSQL --restore-location {location} --source-datastore VaultStore --target-resource-id $targetOssId --recovery-point-id 9da55e757af94261afa009b43cd3222a --secret-store-type AzureKeyVault --secret-store-uri "https://restoreoss-test.vault.azure.net/secrets/dbauth3" > OssRestoreReq.JSON
للحصول على نقطة استرداد مستندة إلى الأرشيف، تحتاج إلى ما يلي:
- إعادة الترطيب من مخزن بيانات الأرشيف إلى مخزن بيانات المخزن.
- تعديل مخزن البيانات المصدر.
- إضافة معلمات أخرى لتحديد أولوية الإماهة.
- حدد المدة التي يجب الاحتفاظ بنقطة الاسترداد المعاد ترطيبها في مخزن بيانات المخزن.
- استعادة كقاعدة بيانات من نقطة الاسترداد هذه.
استخدم الأمر التالي لإعداد الطلب لجميع العمليات المذكورة سابقا في وقت واحد:
az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureDatabaseForPostgreSQL --restore-location {location} --source-datastore ArchiveStore --target-resource-id $targetOssId --recovery-point-id 9da55e757af94261afa009b43cd3222a --secret-store-type AzureKeyVault --secret-store-uri "https://restoreoss-test.vault.azure.net/secrets/dbauth3" --rehydration-priority Standard --rehydration-duration 12 > OssRestoreFromArchiveReq.JSON
استرداد كملفات
إحضار URI للحاوية داخل حساب التخزين الذي قمت بتعيين الأذونات له. يستخدم المثال التالي حاوية باسم testcontainerrestore
ضمن حساب تخزين يسمى testossstorageaccount
باشتراك مختلف:
$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"
az dataprotection backup-instance restore initialize-for-data-recovery-as-files
استخدم الأمر لإعداد طلب الاستعادة مع جميع التفاصيل ذات الصلة:
az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQL --restore-location {location} --source-datastore VaultStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON
بالنسبة لنقطة الاسترداد المستندة إلى الأرشيف، في البرنامج النصي التالي:
- تعديل مخزن البيانات المصدر.
- أضف أولوية إعادة التنشيط ومدة الاستبقاء، بالأيام، لنقطة الاسترداد التي تمت إعادة تنشيطها.
az dataprotection backup-instance restore initialize-for-data-recovery-as-files --datasource-type AzureDatabaseForPostgreSQL --restore-location {location} --source-datastore ArchiveStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a --rehydration-priority Standard --rehydration-duration 12 > OssRestoreAsFilesReq.JSON
للتحقق مما إذا كان ملف JSON سينجح في إنشاء موارد جديدة، استخدم az dataprotection backup-instance validate-for-restore
الأمر .
تشغيل الاستعادة
az dataprotection backup-instance restore trigger
استخدم الأمر لتشغيل عملية الاستعادة مع الطلب الذي تم إعداده مسبقا:
az dataprotection backup-instance restore trigger -g testBkpVaultRG --vault-name TestBkpVault --backup-instance-name testpostgresql-empdb11-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e --restore-request-object OssRestoreReq.JSON
تتبع الوظائف
تعقب المهام باستخدام az dataprotection job list
الأمر . يمكنك سرد جميع الوظائف وجلب تفاصيل مهمة معينة.
يمكنك أيضا استخدام Az.ResourceGraph
لتعقب المهام عبر جميع خزائن النسخ الاحتياطي.
az dataprotection job list-from-resourcegraph
استخدم الأمر للحصول على المهمة ذات الصلة عبر جميع خزائن النسخ الاحتياطي:
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --operation Restore