共用方式為


使用 Azure CLI 備份 Azure PostgreSQL 資料庫

本文說明如何使用 Azure CLI 備份 Azure PostgreSQL 資料庫

在本文中,您將學會如何:

  • 建立備份保存庫
  • 建立備份原則
  • 設定 Azure PostgreSQL 資料庫的備份
  • 執行隨選備份作業

如需 informgreSQL 資料庫的支援案例和限制詳細資訊,請參閱支援矩陣

建立備份保存庫

備份保存庫是 Azure 中的儲存體實體。 這會儲存 Azure 備份所支援的新工作負載備份資料。 例如,適用於 PostgreSQL 伺服器的 Azure 資料庫、儲存體帳戶中的 blob,以及 Azure 磁碟。 備份保存庫有助於輕鬆組織備份資料,同時可減輕管理負擔。 備份保存庫是以 Azure 的 Azure Resource Manager 模型為基礎,可提供增強功能來協助保護備份資料。

在您建立備份保存庫之前,請在保存庫中選擇資料的儲存體備援。 然後,繼續使用該儲存體備援和位置來建立備份保存庫。

在本文中,我們會在 westus 中的資源群組 testBkpVaultRG 下,建立備份保存庫 TestBkpVault。 使用 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"
}

建立保存庫之後,請建立備份原則來保護 Azure PostgreSQL 資料庫。

建立備份原則

了解 PostGreSQL 備份原則

磁碟備份每天會提供多個備份,blob 備份是不含觸發程序的連續備份,而 PostgreSQL 備份則會提供封存保護。 初次傳送至保存庫的備份資料,可根據每個定義的規則或生命週期移至封存層。 根據此情況,接著要來了解 PostgreSQL 的備份原則物件。

  • PolicyRule
    • BackupRule
      • BackupParameter
        • BackupType (在此案例中為完整資料庫備份)
        • 初始資料存放區 (備份最初存放的位置)
        • 觸發程序 (觸發備份的方式)
          • 依據排程
          • 預設標記準則 (所有已排程備份的預設「標記」。此標記會將備份連結至保留規則)
    • 預設保留規則 (依預設會套用至初始資料存放區上所有備份的規則)

因此,此物件會定義要觸發的備份類型、觸發備份的方式 (透過排程)、備份所標記的物件、備份存放的位置 (資料存放區),以及資料存放區中備份資料的生命週期。 PostgreSQL 的預設 PowerShell 物件表示要每週觸發一次完整備份,而且備份會到達保存庫,並在其中儲存三個月。

如果您想要將封存層新增至原則,則須決定資料從保存庫移至封存的時間、資料存放在封存中的持續時間,以及何種已排程備份應標記為可封存。 因此,您必須新增保留規則,該規則會針對從保存庫資料存放區,移至封存資料存放區的備份資料,定義其生命週期,以及存放在封存資料存放區的持續時間。 接著,您必須新增標記,將已排程備份標記為符合封存資格

PowerShell 產生的物件如下所示:

  • PolicyRule
    • BackupRule
      • BackupParameter
        • BackupType (在此案例中為完整資料庫備份)
        • 初始資料存放區 (備份最初存放的位置)
        • 觸發程序 (觸發備份的方式)
          • 依據排程
          • 預設標記準則 (所有已排程備份的預設「標記」。此標記會將備份連結至保留規則)
          • 與新保留規則具有相同名稱 'X' 的新標記準則
    • 預設保留規則 (依預設,該規則會套用至初始資料存放區上的所有備份)
    • 名為 'X' 的新保留規則
      • 生命週期
        • 來源資料存放區
        • 於時間週期過後在來源資料存放區中刪除
        • 複製到目標資料存放區

擷取原則範本

若要瞭解 Azure 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"
    }
  ]
}

原則範本是由觸發程序 (決定由什麼項目觸發備份) 和生命週期 (決定何時刪除/複製/移動備份) 所組成。 在 Azure PostgreSQL 資料庫備份中,觸發程序的預設值是已排程的每週觸發程序 (每七天備份一次),且每個備份會保留三個月。

排程觸發程序:

"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,而間隔類型為 [每週]

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

新增保留規則

如果您想要新增封存保護,便需要修改原則範本,如下所示。

在預設保留規則下,預設範本會具有初始資料存放區的生命週期。 在此案例中,規則表示在三個月後刪除備份資料。 您應新增保留規則,藉以定義將資料「移動」至「封存」資料存放區的時間,也就是初次將資料複製到封存資料存放區的時間,以及在保存庫資料存放區中刪除該資料的時間。 此外,此規則也應定義資料存放在封存資料存放區的持續時間。 使用 az dataprotection backup-policy retention-rule create-lifecycle 命令來建立新的生命週期,並使用 az dataprotection backup-policy retention-rule set 命令,將其與新規則或現有規則產生關聯。

下列範例會建立名為每月的新保留規則,其中每個月的初次成功備份應在保存庫中保留 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

新增標記和相關準則

建立保留規則後,您便可在備份原則的觸發程序屬性中,建立對應的標記。 使用 az dataprotection backup-policy tag create-absolute-criteria 命令來建立新的標記準則,並使用 az dataprotection backup-policy tag set 命令來更新現有標記,或建立新標記。

下列範例會針對當月的初次成功備份,建立新的標記和準則。 標記會與要套用的對應保留規則具有相同名稱。

在此範例中,標記準則應命名為每月

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 PostgreSQL 資料庫。

主要相關實體

要保護的 PostGreSQL 資料庫

擷取所要保護 PostgreSQL 的 Azure Resource Manager 識別碼 (ARM 識別碼)。 這會做為資料庫的識別碼。 我們將使用 PostgreSQL 伺服器 testpostgresql 下,名為 empdb11 的資料庫範例,其位於不同訂用帳戶下的資源群組 ossrg 中。

下列範例會使用 Bash。

ossId="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"

Azure 金鑰保存庫

Azure 備份服務不會儲存連線到 PostgreSQL 資料庫所用的使用者名稱和密碼。 相反地,備份管理員必須將「金鑰」植入金鑰保存庫中。 接著,備份服務會存取金鑰保存庫、讀取金鑰,並存取資料庫。 請記下相關金鑰的祕密識別碼。

下列範例會使用 Bash。

keyURI="https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"

備份保存庫

備份保存庫必須連線到 PostgreSQL 伺服器,並透過金鑰保存庫中的金鑰來存取資料庫。 因此,其會需要 PostgreSQL 伺服器和金鑰保存庫的存取權。 存取權會授與備份保存庫的受控服務識別 (MSI)。

請在儲存資料庫金鑰的 PostgreSQL 伺服器和 Azure 金鑰保存庫中,針對備份保存庫的受控服務識別 (MSI),查看您應授與的權限

準備要求

設定所有相關的權限之後,請以兩個步驟來執行備份的設定。

  1. 我們會使用 az dataprotection backup-instance initialize 命令,透過相關保存庫、原則、PostgreSQL 資料庫來準備相關要求。
  2. 我們會使用 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 檔案。 在下列範例中,有兩個名稱為預設每月的保留規則。 我們會使用每月規則來執行隨選備份。

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

下一步