共用方式為


使用 Azure CLI 備份 PostgreSQL 資料庫

本文說明如何使用 Azure CLI 在 Azure 虛擬機 中備份 PostgreSQL 資料庫。 您也可以使用適用於 PostgreSQL 資料庫的 Azure 入口網站Azure PowerShellREST API 來設定備份。

深入了解 支援的案例 和備份適用於PostgreSQL的 Azure 資料庫 常見問題

建立備份保存庫

備份保存庫是 Azure 中的記憶體實體。 它會儲存 Azure 備份支援的新工作負載所需的備份資料,例如,適用於 PostgreSQL 的 Azure 資料庫伺服器、儲存體帳戶中的 Blob,以及 Azure 磁碟。 備份保存庫有助於輕鬆組織備份資料,同時可減輕管理負擔。 備份保存庫是以 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 的備份原則物件:

  • 政策規則
    • 備份規則
      • 備份參數
        • 備份型態 (在此情況下為完整資料庫備份)
        • 初始資料存放區 (備份一開始到達的位置)
        • 觸發程式(如何觸發備份)
          • 排程
          • 預設標記準則 (將所有排程備份連結至保留規則的預設標籤)
    • 預設保留規則(預設會套用至初始資料存放區上所有備份的規則)

原則物件會定義觸發的備份類型、觸發方式(透過排程)、它們標記的內容、登陸位置(資料存放區),以及數據存放區中的數據生命週期。

PostgreSQL 的預設 PowerShell 物件會指出每周觸發 完整 備份。 備份會到達保險庫,在那裡儲存三個月。

如果您想要將封存層新增至原則,您必須決定數據何時會從保存庫移至封存、數據會保留在封存中多久,以及哪些排程備份應該標記為可封存。 您必須新增保留規則,以定義備份數據從保存庫數據存放區到封存資料存放區的生命週期。 保留規則也會定義備份數據在封存資料存放區中停留的時間長度。 然後,您必須新增標記,將排程備份標示為符合封存資格。

PowerShell 產生的物件如下所示:

  • 政策規則
    • 備份規則
      • 備份參數
        • 備份型態 (在此情況下為完整資料庫備份)
        • 初始資料存放區 (備份一開始到達的位置)
        • 觸發程式(如何觸發備份)
          • 排程
          • 預設標記準則 (預設標籤標,會將所有排程備份連結至保留規則)
          • 具有相同名稱之新保留規則的新標記準則
    • 預設保留規則(預設會套用至初始資料存放區上所有備份的規則)
    • 新的保留規則
      • 生命週期
        • 來源資料存放區
        • 來源資料存放區中刪除的時間週期
        • 複製到目標數據存放區

擷取原則範本

若要瞭解 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 資料庫備份中,觸發程序的預設值是排程的每週觸發程序 (每七天備份一次)。 每個備份都會保留三個月。

排程觸發程序

"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

新增保留規則

如果您想要新增封存保護,您必須修改原則範本。

默認範本具有預設保留規則下初始數據存放區的生命週期。 在此案例中,規則表示在三個月後刪除備份資料。 您應該新增新的保留規則,以定義資料何時移至封存資料存放區。 也就是說,備份數據會先複製到封存資料存放區,然後在保存庫數據存放區中刪除。

此外,規則應該定義在封存資料存放區中保留數據的時間長度。 若要建立新的生命週期,請使用 az dataprotection backup-policy retention-rule create-lifecycle 命令。 若要將這些生命週期與新的或現有的規則產生關聯,請使用 az dataprotection backup-policy retention-rule set 命令。

下列範例會建立名為 Monthly的新保留規則。 在此規則中,每月的第一個成功備份會保留在保存庫中六個月,然後移至封存層並在封存層中保留 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

設定備份

建立保存庫和原則之後,您必須考慮三個關鍵點,以在適用於PostgreSQL的 Azure 資料庫中備份 PostgreSQL 資料庫。

瞭解重要實體

要備份的 PostgreSQL 資料庫

擷取要備份之 PostgreSQL 資料庫的 Resource Manager 識別符。 此標識碼可作為資料庫的標識碼。 下列範例會使用 PostgreSQL 伺服器底下名為 empdb11 的資料庫,此資料庫 testposgresql存在於不同訂用帳戶下的資源群組 ossrg 中。 此範例使用Bash。

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

金鑰保存庫

Azure 備份服務不會儲存連線到 PostgreSQL 資料庫所用的使用者名稱和密碼。 相反地,備份管理員會將 密鑰 植入金鑰保存庫。 Azure 備份服務接著會存取金鑰保存庫、讀取密鑰,以及存取資料庫。

下列範例使用Bash。 請記下相關金鑰的祕密識別碼。

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

備份儲存庫

備份保存庫必須連線到 PostgreSQL 伺服器,然後透過密鑰保存庫中存在的金鑰存取資料庫。 因此,備份保存庫需要存取 PostgreSQL 伺服器和密鑰保存庫。 存取權會授與備份保存庫的受控識別。

請了解您應將哪些權限授與 PostgreSQL 伺服器上的備份保存庫受控識別,以及將金鑰儲存至資料庫的金鑰保存庫。

準備要求

設定所有相關許可權之後,請執行兩個步驟中的備份設定:

  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 檔案。 在下列範例中,有兩個名為DefaultMonthly 的保留規則。 本文使用 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