Sdílet prostřednictvím


Obnovení flexibilních serverů Azure Database for PostgreSQL pomocí Azure CLI

Tento článek popisuje, jak obnovit flexibilní server Azure Database for PostgreSQL pomocí Azure CLI.

Poznámka:

Možnost Obnovení původního umístění (OLR) není u databází PaaS podporovaná. Místo toho použijte Alternate-Location Recovery (ALR) k obnovení z bodu obnovení a vytvoření nové databáze na stejném nebo jiném flexibilním serveru Azure PostgreSQL, který uchovává zdrojové i obnovené databáze.

V příkladech použijeme existující zálohovací trezor TestBkpVault ve skupině prostředků testBkpVaultRG.

Požadavky

Před obnovením ze zálohy flexibilního serveru Azure Database for PostgreSQL si projděte následující požadavky:

Poznámka:

Zálohovaná data se ukládají v zálohovacím trezoru jako blob v rámci tenanta Microsoftu. Během operace obnovení se zálohovaná data zkopírují z jednoho účtu úložiště do druhého napříč tenanty.

Nastavení oprávnění pro obnovení

Trezor služby Backup používá spravovanou identitu pro přístup k dalším prostředkům Azure. K obnovení ze zálohy vyžaduje spravovaná identita trezoru služby Backup sadu oprávnění na flexibilním serveru Azure PostgreSQL, do kterého se má databáze obnovit.

Pokud chcete přiřadit příslušná oprávnění pro spravovanou identitu přiřazenou systémem trezoru na cílovém flexibilním serveru PostgreSQL, zkontrolujte sadu oprávnění potřebná k zálohování databáze flexibilního serveru Azure PostgreSQL.

Pokud chcete obnovit bod obnovení jako soubory do účtu úložiště, spravovaná identita přiřazená systémem trezoru služby Backup potřebuje mít přístup k cílovému účtu úložiště.

Získejte příslušný bod obnovení

Pokud chcete vypsat všechny instance zálohování v trezoru, použijte az dataprotection backup-instance list tento příkaz. Potom načtěte příslušnou instanci pomocí příkazu az dataprotection backup-instance show. Alternativně pro scénáře ve velkém měřítku můžete pomocí příkazu vypsat instance zálohování napříč trezory a předplatnými 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
  }
.
.

Jakmile je instance identifikovaná, pomocí az dataprotection recovery-point list příkazu načtěte příslušný bod obnovení.

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"
}

Příprava žádosti o obnovení

Bod obnovení pro databázi flexibilního serveru PostgreSQL můžete obnovit pouze jako soubory.

Obnovit jako soubory

Načtěte identifikátor URI (Uniform Resource Identifier) kontejneru v rámci účtu úložiště, ke kterému byla přiřazena oprávnění. Například kontejner pojmenovaný testcontainerrestore v rámci účtu úložiště testossstorageaccount s jiným předplatným.

$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"

az dataprotection backup-instance restore initialize-for-data-recovery-as-files Pomocí příkazu připravte žádost o obnovení se všemi relevantními podrobnostmi.

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

Poznámka:

Po dokončení obnovení do cílového účtu úložiště můžete pomocí pg_restore nástroje obnovit databázi flexibilního serveru Azure Database for PostgreSQL z cíle.

Pokud se chcete připojit k existujícímu flexibilnímu serveru PostgreSQL a existující databázi, použijte následující příkaz:

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

V tomto skriptu:

  • Fd: Formát adresáře.
  • -j: Počet pracovních míst.
  • -C: Spustí výstup příkazem, který vytvoří samotnou databázi a pak se k ní znovu připojí.

Následující příklad ukazuje, jak se syntaxe může zobrazit:

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

Pokud máte k obnovení více než jednu databázi, spusťte znovu předchozí příkaz pro každou databázi. Pomocí více souběžných úloh -jtaké můžete zkrátit dobu obnovení velké databáze na cílovém serveru s více virtuálními jádry. Počet úloh může být roven nebo menší než počet přidělených vCPUs pro cílový server.

Spustit obnovení

K aktivaci operace obnovení s připraveným požadavkem použijte az dataprotection backup-instance restore trigger příkaz.

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

Sledování prací

Pomocí příkazu můžete sledovat všechny úlohy az dataprotection job list . Můžete zobrazit seznam všech úloh a načíst konkrétní podrobnosti úlohy.

Můžete také použít Az.ResourceGraph ke sledování úloh ve všech trezorech služby Backup. Pomocí příkazu az dataprotection job list-from-resourcegraph získáte příslušnou úlohu, která se nachází ve všech úložištích Backup.

az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQLFlexibleServer --operation Restore

Další kroky

Řešení běžných chyb při operacích zálohování a obnovení pro Azure Database for PostgreSQL – flexibilní server.