この記事では、Azure Database for PostgreSQL - フレキシブル サーバーを Azure Backup でバックアップされた Azure Database for PostgreSQL - フレキシブル サーバーに復元する方法について説明します。
この例ではここで、リソース グループ testBkpVaultRG の下にある既存のバックアップ コンテナー TestBkpVault を使用します。
バックアップされた PostgreSQL データベースを復元する
アクセス許可の設定
バックアップ コンテナーは、マネージド ID を使用して他の Azure リソースにアクセスします。 バックアップから復元するには、バックアップ コンテナーのマネージド ID に、サーバーの復元先のストレージ アカウントに対する一連のアクセス許可が必要です。 マネージド ID は、ストレージ アカウントに対する "ストレージ BLOB データ共同作成者" ロールを割り当てられている必要があります。
適切な回復ポイントのフェッチ
コンテナー内のすべてのバックアップ インスタンスの一覧を取得するには、az data protection backup-instance list コマンドを使います。 次に、az data protection backup-instance show コマンドを使って関連するインスタンスをフェッチします。 または、"大規模な" シナリオでは、az data protection backup-instance list-from-resourcegraph コマンドを使って、複数のコンテナーとサブスクリプション全体を対象に、バックアップ インスタンスの一覧を取得できます。
az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQLFlexibleServer -subscriptions 00001111-aaaa-2222-bbbb-3333cccc4444
{
"datasourceId": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
"extendedLocation": null,
"id": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpostgresql-empdb11-957d23b1-c679-4c94-ade6-c4d34635e149",
"identity": null,
"kind": "",
"location": "",
"managedBy": "",
"name": "testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149",
"plan": null,
"properties": {
"currentProtectionState": "ProtectionConfigured",
"dataSourceInfo": {
"baseUri": null,
"datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
"objectType": "Datasource",
"resourceID": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
"resourceLocation": "westus",
"resourceName": "postgres",
"resourceProperties": null,
"resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
"resourceUri": ""
},
"dataSourceProperties": null,
"dataSourceSetInfo": {
"baseUri": null,
"datasourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
"objectType": "DatasourceSet",
"resourceID": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/ossdemoRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/testpgflex",
"resourceLocation": "westus",
"resourceName": "testpgflex",
"resourceProperties": null,
"resourceType": "Microsoft.DBforPostgreSQL/flexibleServers",
"resourceUri": ""
},
"friendlyName": "testpgflex",
"objectType": "BackupInstance",
"policyInfo": {
"policyId": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/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": bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f,
"tags": null,
"tenantId": aaaabbbb-0000-cccc-1111-dddd2222eeee,
"type": "microsoft.dataprotection/backupvaults/backupinstances",
"vaultName": "testBkpVault",
"zones": null
}
.
.
.
.
.
インスタンスがわかったら、az data protection recovery-point list コマンドを使って関連する復旧ポイントをフェッチします。
az dataprotection recovery-point list --backup-instance-name testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149 -g testBkpVaultRG --vault-name TestBkpVault
{
"id": "/subscriptions/00001111-aaaa-2222-bbbb-3333cccc4444/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/testBkpVault/backupInstances/testpgflex-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 – フレキシブル サーバー データベースの復旧ポイントは、ファイルとしてのみ復元できます。
ファイルとして復元
アクセス許可が割り当てられたストレージ アカウント内のコンテナーの Uniform Resource Identifier (URI) をフェッチします。 たとえば、異なるサブスクリプションのストレージ アカウント testossstorageaccount の下にある、testcontainer restore という名前のコンテナーです。
$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"
すべての関連する詳細情報を使って復元要求を準備するには、az data protection 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 --recovery-point-id 9da55e757af94261afa009b43cd3222a > OssRestoreAsFilesReq.JSON
JSON ファイルで新しいリソースが正常に作成されるかどうかを検証するには、az data protection backup-instance validate-for-restore コマンドを使います。
復元のトリガー
前に準備した要求で復元操作をトリガーするには、az data protection backup-instance restore trigger コマンドを使います。
az dataprotection backup-instance restore trigger -g testBkpVaultRG --vault-name TestBkpVault --backup-instance-name testpgflex-957d23b1-c679-4c94-ade6-c4d34635e149 --restore-request-object OssRestoreReq.JSON
ジョブの追跡
az data protection job list コマンドを使って、すべてのジョブを追跡します。 すべてのジョブを一覧表示し、特定のジョブの詳細を取得できます。
Az.ResourceGraph を使用して、すべての Backup コンテナーを対象に、全ジョブを追跡することもできます。 すべてのバックアップ コンテナーから関連するジョブを取得するには、az data protection job list-from-resourcegraph コマンドを使います。
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQLFlexibleServer --operation Restore
復元されたストレージ アカウントから PostgreSQL - フレキシブル サーバーを作成する
ターゲットのストレージ アカウントへの復元が完了した後、pg_restore ユーティリティを使って、ターゲットから Azure Database for 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 を使うと、複数の仮想コアを持つターゲット サーバーに大きなデータベースを復元する時間を短縮できます。 ジョブの数は、ターゲット サーバーに割り当てられた vCPU の数以下にすることができます。