이 문서에서는 Azure CLI를 사용하여 Azure Virtual Machines 에서 PostgreSQL 데이터베이스를 백업하는 방법을 설명합니다. Azure Portal, Azure PowerShell 및 POSTgreSQL 데이터베이스용 REST API를 사용하여 백업을 구성할 수도 있습니다.
지원되는 시나리오 및 Azure Database for PostgreSQL 백업에 대한 질문과 대답에 대해 자세히 알아봅니다.
Backup 자격 증명 모음 만들기
Backup 자격 증명 모음은 Azure의 스토리지 엔터티입니다. Azure Database for PostgreSQL 서버, 스토리지 계정의 Blob 및 Azure 디스크와 같이 Azure Backup에서 지원하는 새 워크로드에 대한 백업 데이터를 저장합니다. 백업 볼트는 백업 데이터를 구성하는 데 도움이 되며, 관리 부담을 최소화합니다. 백업 볼트는 Azure의 Azure Resource Manager 모델을 기반으로 하며, 백업 데이터를 안전하게 보호할 수 있도록 돕는 향상된 기능을 제공합니다.
백업 볼트를 만들기 전에 볼트 내 데이터의 저장소 복제 모드를 선택합니다. 이후, 지정된 스토리지 중복도와 위치를 사용하여 백업 볼트를 만드십시오.
이 문서에서는 TestBkpVault
지역의 리소스 그룹 westus
아래에 testBkpVaultRG
라는 이름의 백업 자격 증명 모음을 만듭니다. 이 az dataprotection vault create
명령을 사용하여 백업 볼트를 만드세요.
백업 보관소를 만드는 방법에 대해 자세히 알아보기.
az dataprotection backup-vault create -g testBkpVaultRG --vault-name TestBkpVault -l westus --type SystemAssigned --storage-settings datastore-type="VaultStore" type="LocallyRedundant"
{
"eTag": null,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/testBkpVaultRG/providers/Microsoft.DataProtection/BackupVaults/TestBkpVault",
"identity": {
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
},
"___location": "westus",
"name": "TestBkpVault",
"properties": {
"provisioningState": "Succeeded",
"storageSettings": [
{
"datastoreType": "VaultStore",
"type": "LocallyRedundant"
}
]
},
"resourceGroup": "testBkpVaultRG",
"systemData": null,
"tags": null,
"type": "Microsoft.DataProtection/backupVaults"
}
백업 정책 만들기
PostgreSQL 데이터베이스를 보호하기 위해 금고를 만든 후 백업 정책을 생성할 수 있습니다. REST API를 사용하여 PostgreSQL 데이터베이스에 대한 백업 정책을 만들 수도 있습니다.
PostgreSQL 백업 정책 이해
디스크 백업은 하루에 여러 백업을 제공하고 Blob 백업은 트리거 없이 연속 백업인 반면 PostgreSQL 백업은 보관 보호를 제공합니다. 처음 볼트로 전송되는 백업 데이터는 정의된 규칙 또는 수명 주기에 따라 아카이브 계층으로 이동할 수 있습니다.
이 컨텍스트에서 다음 계층 구조는 PostgreSQL에 대한 백업 정책 개체를 이해하는 데 도움이 될 수 있습니다.
- 정책 규칙
- 백업 규칙
- Backup 매개 변수
- 백업 유형(이 경우 전체 데이터베이스 백업)
- 초기 데이터 저장소(백업이 처음에 배치되는 위치)
- 트리거(백업이 트리거되는 방법)
- 일정
- 기본 태그 지정 조건(예약된 모든 백업을 보존 규칙에 연결하는 기본 태그)
- Backup 매개 변수
- 기본 보존 규칙(기본적으로 초기 데이터 저장소의 모든 백업에 적용되는 규칙)
- 백업 규칙
정책 개체는 트리거되는 백업 유형, 트리거되는 방법(일정을 통해), 태그 지정 방법, 랜딩 위치(데이터 저장소), 데이터 저장소에 있는 해당 데이터의 수명 주기를 정의합니다.
PostgreSQL의 기본 PowerShell 개체는 매주 전체 백업을 트리거한다고 합니다. 백업은 금고에 도착하여 3개월 동안 저장됩니다.
정책에 아카이브 계층을 추가하려면 데이터를 보관소에서 아카이브로 이동할 시기, 데이터가 아카이브에 얼마나 오래 유지될 것인지, 그리고 어떤 예약된 백업이 보관 가능으로 태그되어야 하는지를 결정해야 합니다. 금고 데이터 저장소에서 아카이브 데이터 저장소로 백업 데이터의 수명 주기를 정의하는 보존 규칙을 추가해야 합니다. 또한 보존 규칙은 백업 데이터가 보관 데이터 저장소에 유지되는 기간을 정의합니다. 그런 다음 예약된 백업을 보관할 수 있는 것으로 표시하는 태그를 추가해야 합니다.
결과 PowerShell 개체는 다음과 같습니다.
- 정책 규칙
- 백업 규칙
- Backup 매개 변수
- 백업 유형(이 경우 전체 데이터베이스 백업)
- 초기 데이터 저장소(백업이 처음에 배치되는 위치)
- 트리거(백업이 트리거되는 방법)
- 일정
- 기본 태그 지정 조건(예약된 모든 백업을 보존 규칙에 연결하는 기본 태그)
- 이름이 같은 새 보존 규칙에 대한 새 태그 지정 조건
- Backup 매개 변수
- 기본 보존 규칙(기본적으로 초기 데이터 저장소의 모든 백업에 적용되는 규칙)
- 새 보존 규칙
- 수명 주기
- 원본 데이터 저장소
- 원본 데이터 저장소에서 삭제하는 기간
- 대상 데이터 저장소에 복사
- 수명 주기
- 백업 규칙
정책 템플릿 검색
PostgreSQL 데이터베이스 백업에 대한 백업 정책의 내부 구성 요소를 이해하려면 명령을 사용하여 정책 템플릿을 검색합니다 az dataprotection backup-policy get-default-policy-template
. 이 명령은 데이터 원본 형식에 대한 기본 정책 템플릿을 반환합니다. 이 정책 템플릿을 사용하여 새 정책을 만듭니다.
az dataprotection backup-policy get-default-policy-template --datasource-type AzureDatabaseForPostgreSQL
{
"datasourceTypes": [
"Microsoft.DBforPostgreSQL/servers/databases"
],
"name": "OssPolicy1",
"objectType": "BackupPolicy",
"policyRules": [
{
"backupParameters": {
"backupType": "Full",
"objectType": "AzureBackupParams"
},
"dataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"name": "BackupWeekly",
"objectType": "AzureBackupRule",
"trigger": {
"objectType": "ScheduleBasedTriggerContext",
"schedule": {
"repeatingTimeIntervals": [
"R/2021-08-15T06:30:00+00:00/P1W"
],
"timeZone": "UTC"
},
"taggingCriteria": [
{
"isDefault": true,
"tagInfo": {
"id": "Default_",
"tagName": "Default"
},
"taggingPriority": 99
}
]
}
},
{
"isDefault": true,
"lifecycles": [
{
"deleteAfter": {
"duration": "P3M",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"targetDataStoreCopySettings": []
}
],
"name": "Default",
"objectType": "AzureRetentionRule"
}
]
}
정책 템플릿은 트리거(백업 트리거를 결정하는 트리거) 및 수명 주기(백업을 삭제, 복사 또는 이동할 시기를 결정함)로 구성됩니다. PostgreSQL 데이터베이스 백업에서 트리거의 기본값은 예약된 주간 트리거(7일마다 하나의 백업)입니다. 각 백업은 3개월 동안 보존됩니다.
예약된 트리거
"trigger": {
"objectType": "ScheduleBasedTriggerContext",
"schedule": {
"repeatingTimeIntervals": [
"R/2021-08-15T06:30:00+00:00/P1W"
],
"timeZone": "UTC"
}
구금 규칙의 기본 수명 주기
{
"isDefault": true,
"lifecycles": [
{
"deleteAfter": {
"duration": "P3M",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"targetDataStoreCopySettings": []
}
],
"name": "Default",
"objectType": "AzureRetentionRule"
}
정책 템플릿 수정
Azure PowerShell에서 개체를 준비 위치로 사용하여 모든 수정을 수행할 수 있습니다. Azure CLI에서는 개체의 개념이 없으므로 파일을 사용해야 합니다. 각 편집 작업은 새 파일로 리디렉션되어야 합니다. 여기서 콘텐츠는 입력 파일에서 읽고 출력 파일로 리디렉션됩니다. 나중에 스크립트에서 파일을 사용하는 동안 필요에 따라 파일 이름을 바꿀 수 있습니다.
일정 수정
기본 정책 템플릿은 일주일에 한 번 백업을 제공합니다. 백업이 일주일에 여러 번 발생하도록 일정을 수정할 수 있습니다. 일정을 수정하려면 명령을 사용합니다 az dataprotection backup-policy trigger set
.
다음 예제에서는 매주 주 백업을 매주 일요일, 수요일 및 금요일로 수정합니다. 일정 날짜 배열은 날짜를 언급하고, 해당 날짜의 요일을 요일로 간주합니다. 또한 이러한 일정이 매주 반복되도록 지정해야 합니다. 따라서 일정 간격은 1
이며 간격 유형은 Weekly
.
az dataprotection backup-policy trigger create-schedule --interval-type Weekly --interval-count 1 --schedule-days 2021-08-15T22:00:00 2021-08-18T22:00:00 2021-08-20T22:00:00
[
"R/2021-08-15T22:00:00+00:00/P1W",
"R/2021-08-18T22:00:00+00:00/P1W",
"R/2021-08-20T22:00:00+00:00/P1W"
]
az dataprotection backup-policy trigger set --policy .\OSSPolicy.json --schedule R/2021-08-15T22:00:00+00:00/P1W R/2021-08-18T22:00:00+00:00/P1W R/2021-08-20T22:00:00+00:00/P1W > EditedOSSPolicy.json
새 보관 규칙 추가
보관 보호를 추가하려면 정책 템플릿을 수정해야 합니다.
기본 템플릿에는 기본 보존 규칙에 따라 초기 데이터 저장소의 수명 주기가 있습니다. 이 시나리오에서 규칙은 3개월 후에 백업 데이터를 삭제하도록 말합니다. 데이터가 보관 데이터 저장소로 이동되는 시기를 정의하는 새 보존 규칙을 추가해야 합니다. 백업 데이터는 먼저 보관 데이터 저장소에 복사된 다음 금고 데이터 저장소에서 삭제됩니다.
또한 규칙은 보관 데이터 저장소에 데이터를 유지할 기간을 정의해야 합니다. 새 수명 주기를 만들려면 명령을 사용합니다 az dataprotection backup-policy retention-rule create-lifecycle
. 이러한 수명 주기를 새 규칙 또는 기존 규칙과 연결하려면 이 명령을 사용합니다 az dataprotection backup-policy retention-rule set
.
다음 예제에서는 이름이 Monthly
새 보존 규칙을 만듭니다. 이 규칙에 따라 매월 첫 번째로 성공한 백업은 6개월 동안 보관소에 유지되며, 보관 계층으로 이동하여 24개월 동안 보관 계층에 유지됩니다.
az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 6 --retention-duration-type Months --source-datastore VaultStore --target-datastore ArchiveStore --copy-option CopyOnExpiryOption > VaultToArchiveLifeCycle.JSON
az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 24 --retention-duration-type Months -source-datastore ArchiveStore > OnArchiveLifeCycle.JSON
az dataprotection backup-policy retention-rule set --lifecycles .\VaultToArchiveLifeCycle.JSON .\OnArchiveLifeCycle.JSON --name Monthly --policy .\EditedOSSPolicy.JSON > AddedRetentionRulePolicy.JSON
태그 및 관련 조건 추가
보존 규칙을 만든 후에는 백업 정책의 속성에 해당 태그를 Trigger
만들어야 합니다. 새 태그 지정 조건을 만들려면 명령을 사용합니다 az dataprotection backup-policy tag create-absolute-criteria
. 기존 태그를 업데이트하거나 새 태그를 만들려면 이 명령을 사용합니다 az dataprotection backup-policy tag set
.
다음 예제에서는 조건과 함께 새 태그를 만듭니다. 이 태그는 월의 첫 번째 성공적인 백업입니다. 태그는 적용할 해당 보존 규칙과 이름이 동일합니다.
이 예제에서 태그 조건의 이름은 Monthly
다음과 같습니다.
az dataprotection backup-policy tag create-absolute-criteria --absolute-criteria FirstOfMonth > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON
일정이 매주 여러 백업(이전 예제에 지정된 대로 매주 일요일, 수요일 및 목요일)이고 일요일 및 금요일 백업을 보관하려는 경우 다음 명령을 사용하여 az dataprotection backup-policy tag create-generic-criteria
태그 지정 조건을 변경할 수 있습니다.
az dataprotection backup-policy tag create-generic-criteria --days-of-week Sunday Friday > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON
새 PostgreSQL 백업 정책 만들기
요구 사항에 따라 템플릿을 수정한 후 이 명령을 사용하여 az dataprotection backup-policy create
수정된 템플릿을 사용하여 정책을 만듭니다.
az dataprotection backup-policy create --backup-policy-name FinalOSSPolicy --policy AddedRetentionRuleAndTag.JSON --resource-group testBkpVaultRG --vault-name TestBkpVault
백업 구성
금고 및 정책을 만든 후, Azure Database for PostgreSQL에서 PostgreSQL 데이터베이스를 백업할 때 고려해야 할 세 가지 핵심 사항이 있습니다.
주요 엔터티 이해
백업할 PostgreSQL 데이터베이스
백업할 PostgreSQL 데이터베이스의 Resource Manager ID를 가져옵니다. 이 ID는 데이터베이스의 식별자 역할을 합니다. 다음 예제에서는 다른 구독의 리소스 그룹 empdb11
에 있는 PostgreSQL 서버 testposgresql
에 포함된 ossrg
라고 명명된 데이터베이스를 사용합니다. 이 예제에서는 Bash를 사용합니다.
ossId="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"
키 보관소
Azure Backup 서비스는 PostgreSQL 데이터베이스에 연결하기 위한 사용자 이름과 암호를 저장하지 않습니다. 대신 백업 관리자는 키를 키 보관소에 저장합니다. 그런 다음, Azure Backup 서비스는 키 자격 증명 모음에 액세스하고, 키를 읽고, 데이터베이스에 액세스합니다.
다음 예제에서는 Bash를 사용합니다. 관련 키의 비밀 식별자를 기록해 둡니다.
keyURI="https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"
백업 금고
백업 볼트는 PostgreSQL 서버에 연결한 다음 키 볼트에 있는 키를 통해 데이터베이스에 액세스해야 합니다. 따라서 백업 금고에는 PostgreSQL 서버 및 키 저장소에 대한 액세스 권한이 필요합니다. 백업 금고의 관리 ID에 액세스 권한이 부여됩니다.
PostgreSQL 서버에서 백업 자격 증명 모음의 관리 ID와 데이터베이스에 대한 키를 저장하는 키 자격 증명 모음에 부여해야 하는 권한에 대해 알아봅니다.
요청 준비
모든 관련 권한을 설정한 후 다음 두 단계로 백업 구성을 수행합니다.
-
az dataprotection backup-instance initialize
명령에서 관련 자격 증명 모음, 정책 및 PostgreSQL 데이터베이스를 사용하여 요청을 준비합니다. - 명령을 사용하여 데이터베이스를 백업하도록 요청을 제출합니다
az dataprotection backup-instance create
.
az dataprotection backup-instance initialize --datasource-id $ossId --datasource-type AzureDatabaseForPostgreSQL -l <vault-___location> --policy-id <policy_arm_id> --secret-store-type AzureKeyVault --secret-store-uri $keyURI > OSSBkpInstance.JSON
az dataprotection backup-instance create --resource-group testBkpVaultRG --vault-name TestBkpVault TestBkpvault --backup-instance .\OSSBkpInstance.JSON
주문형 백업 실행
백업을 트리거하는 동안 보존 규칙을 지정해야 합니다. 정책에서 보존 규칙을 보려면 정책 JSON 파일을 탐색합니다. 다음 예제에서는 이름이 Default
및 Monthly
인 2개의 보존 규칙이 있습니다. 이 문서에서는 Monthly
주문형 백업에 대한 규칙을 사용합니다.
az dataprotection backup-policy show -g ossdemorg --vault-name ossdemovault-1 --subscription e3d2d341-4ddb-4c5d-9121-69b7e719485e --name osspol5
{
"id": "/subscriptions/e3d2d341-4ddb-4c5d-9121-69b7e719485e/resourceGroups/ossdemorg/providers/Microsoft.DataProtection/backupVaults/ossdemovault-1/backupPolicies/osspol5",
"name": "osspol5",
"properties": {
"datasourceTypes": [
"Microsoft.DBforPostgreSQL/servers/databases"
],
"objectType": "BackupPolicy",
"policyRules": [
{
"backupParameters": {
"backupType": "Full",
"objectType": "AzureBackupParams"
},
"dataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"name": "BackupWeekly",
"objectType": "AzureBackupRule",
"trigger": {
"objectType": "ScheduleBasedTriggerContext",
"schedule": {
"repeatingTimeIntervals": [
"R/2020-04-04T20:00:00+00:00/P1W",
"R/2020-04-01T20:00:00+00:00/P1W"
],
"timeZone": "UTC"
},
"taggingCriteria": [
{
"criteria": [
{
"absoluteCriteria": [
"FirstOfMonth"
],
"daysOfMonth": null,
"daysOfTheWeek": null,
"monthsOfYear": null,
"objectType": "ScheduleBasedBackupCriteria",
"scheduleTimes": null,
"weeksOfTheMonth": null
}
],
"isDefault": false,
"tagInfo": {
"eTag": null,
"id": "Monthly_",
"tagName": "Monthly"
},
"taggingPriority": 15
},
{
"criteria": null,
"isDefault": true,
"tagInfo": {
"eTag": null,
"id": "Default_",
"tagName": "Default"
},
"taggingPriority": 99
}
]
}
},
{
"isDefault": false,
"lifecycles": [
{
"deleteAfter": {
"duration": "P10Y",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"targetDataStoreCopySettings": []
}
],
"name": "Monthly",
"objectType": "AzureRetentionRule"
},
{
"isDefault": true,
"lifecycles": [
{
"deleteAfter": {
"duration": "P1Y",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"targetDataStoreCopySettings": []
}
],
"name": "Default",
"objectType": "AzureRetentionRule"
}
]
},
"resourceGroup": "ossdemorg",
"systemData": null,
"type": "Microsoft.DataProtection/backupVaults/backupPolicies"
}
주문형 백업을 트리거하려면 다음 az dataprotection backup-instance adhoc-backup
명령을 사용합니다.
az dataprotection backup-instance adhoc-backup --name "ossrg-empdb11" --rule-name "Monthly" --resource-group testBkpVaultRG --vault-name TestBkpVault
작업 추적
명령을 사용하여 모든 작업을 추적합니다 az dataprotection job list
. 모든 작업을 나열하고 특정 작업 세부 정보를 가져올 수 있습니다.
Az.ResourceGraph
를 사용하여 모든 백업 볼트에서 모든 작업을 추적할 수도 있습니다. 이 az dataprotection job list-from-resourcegraph
명령을 사용하여 백업 볼트에서 관련된 작업을 가져옵니다.
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --status Completed
관련 콘텐츠
- Azure CLI를 사용하여 PostgreSQL 데이터베이스를 복원합니다.
- Azure Portal, Azure PowerShell 및 REST API를 사용하여 PostgreSQL 데이터베이스를 복원합니다.