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


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

В этой статье описывается восстановление гибкого сервера Базы данных Azure для PostgreSQL с помощью Azure CLI.

Примечание.

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

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

Предпосылки

Перед восстановлением из резервных копий Azure Database для PostgreSQL — Flexible Server ознакомьтесь со следующими предварительными условиями:

Примечание.

Данные резервного копирования хранятся в хранилище резервных копий как большой двоичный объект в клиенте Майкрософт. Во время операции восстановления данные резервного копирования копируются из одной учетной записи хранения в другую между клиентами.

Настройка разрешений для восстановления

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

Чтобы назначить соответствующие разрешения для управляемого удостоверения, назначаемого системой хранилища, на целевом сервере PostgreSQL — гибкий сервер, проверьте набор разрешений, необходимых для резервного копирования базы данных Azure 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 AzureDatabaseForPostgreSQLFlexibleServer -subscriptions "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"

{
    "datasourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql/databases/empdb11",
    "extendedLocation": null,
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
    "identity": null,
    "kind": "",
    "location": "",
    "managedBy": "",
    "name": "testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
    "plan": null,
    "properties": {
      "currentProtectionState": "ProtectionConfigured",
      "dataSourceInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers/databases",
        "objectType": "Datasource",
        "resourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql/databases/empdb11",
        "resourceLocation": "westus",
        "resourceName": "postgres",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers/databases",
        "resourceUri": ""
      },
      "dataSourceProperties": null,
      "dataSourceSetInfo": {
        "baseUri": null,
        "datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers/databases",
        "objectType": "DatasourceSet",
        "resourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpostgresql",
        "resourceLocation": "westus",
        "resourceName": "testpostgresql",
        "resourceProperties": null,
        "resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
        "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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "tags": null,
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "type": "microsoft.dataprotection/backupvaults/backupinstances",
    "vaultName": "testBkpVault",
    "zones": null
  }
.
.

После идентификации экземпляра извлеките соответствующую точку восстановления с помощью команды az dataprotection recovery-point list.

az dataprotection recovery-point list --backup-instance-name testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149 -g testBkpVaultRG --vault-name TestBkpVault

{
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149/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"
}

Подготовка запроса на восстановление

Вы можете восстановить точку восстановления для гибкой базы данных сервера PostgreSQL только в виде файлов.

Восстановить как файлы

Получите универсальный идентификатор ресурса (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 AzureDatabaseForPostgreSQLFlexibleServer  --restore-location {location} --source-datastore VaultStore -target-blob-container-url $contURI --target-file-name "empdb11_postgresql-westus_1628853549768" --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON

Примечание.

После завершения восстановления целевой учетной записи хранения можно использовать pg_restore служебную программу для восстановления базы данных Azure для PostgreSQL — гибкой базы данных сервера из целевого объекта.

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

pg_restore -h <hostname> -U <username> -d <db name> -Fd -j <NUM> -C <dump directory>

В этом скрипте:

  • Fd: формат каталога.
  • -j: количество работ.
  • -C: запускает выходные данные с помощью команды, чтобы создать саму базу данных, а затем повторно подключиться к ней.

В следующем примере показано, как может отображаться синтаксис:

pg_restore -h <hostname> -U <username> -j <Num of parallel jobs> -Fd -C -d <databasename> sampledb_dir_format

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

Запуск процесса восстановления

Чтобы активировать операцию восстановления с подготовленным запросом, используйте az dataprotection backup-instance restore trigger команду.

az dataprotection backup-instance restore trigger -g testBkpVaultRG --vault-name TestBkpVault --backup-instance-name testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149 --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 AzureDatabaseForPostgreSQLFlexibleServer --operation Restore

Следующие шаги

Устранение распространенных ошибок при операциях по резервному копированию и восстановлению базы данных Azure PostgreSQL - Flexible Server.