Поделиться через


Восстановление баз данных PostgreSQL с помощью Azure CLI

В этой статье описывается, как с помощью Azure CLI восстановить базы данных PostgreSQL на сервере Azure Database for PostgreSQL, которые вы резервировали через Azure Backup. Вы также можете восстановить базу данных PostgreSQL с помощью портала Azure, Azure PowerShell и REST API.

Поскольку база данных PostgreSQL является базой данных, предоставляемой как платформа как услуга (PaaS), параметр восстановления Original-Location (OLR) для восстановления, заменяя существующую базу данных, из которой были сделаны резервные копии, не поддерживается. Вы можете восстановить базу данных из точки восстановления, чтобы создать базу данных в том же сервере Базы данных Azure для PostgreSQL или на любом другом сервере PostgreSQL. Этот параметр называется Alternate-Location recovery (ALR). ALR помогает сохранить исходную базу данных и восстановленную (новую) базу данных.

Примеры, приведенные в этой статье, относятся к существующему резервному хранилищу TestBkpVault в группе ресурсов testBkpVaultRG.

Восстановление базы данных PostgreSQL, для которой была создана резервная копия

Настройка разрешений

Хранилище резервных копий использует управляемое удостоверение для доступа к другим ресурсам Azure. Чтобы восстановить данные из резервной копии, управляемому удостоверению хранилища резервного копирования требуется набор разрешений на сервере Azure Database for PostgreSQL, на который должна быть восстановлена база данных.

Чтобы назначить соответствующие разрешения для системного управляемого удостоверения в хранилище на целевом сервере PostgreSQL, ознакомьтесь с набором разрешений, необходимых для резервного копирования базы данных PostgreSQL.

Чтобы восстановить точку восстановления в качестве файлов в учетную запись хранения, управляемому удостоверению, назначаемому системой хранилища Azure Backup, требуется доступ к целевой учетной записи хранения.

Получение соответствующей точки восстановления

Чтобы вывести список всех экземпляров резервного копирования в хранилище, используйте 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. Например, база данных PostgreSQL может быть названа emprestored21 под целевым сервером 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

Для архивной точки восстановления необходимо:

  1. Переместить данные из архивного хранилища в хранилище в активном режиме.
  2. Изменить исходное хранилище данных.
  3. Добавить другие параметры, чтобы указать приоритет восстановления.
  4. Укажите длительность хранения восстановленной точки восстановления в хранилище.
  5. Восстановите базу данных из этой точки восстановления.

Используйте следующую команду, чтобы подготовить запрос ко всем ранее упомянутым операциям одновременно:

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