Share via


使用 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": "2ca1d5f7-38b3-4b61-aa45-8147d7e0edbc",
    "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

下一步