Share via


使用 Azure CLI 在 Azure VM 中管理 SQL 資料庫

Azure CLI 可用來從命令列或透過指令碼建立和管理 Azure 資源。 本文說明如何使用 Azure CLI 在 Azure VM 上管理備份的 SQL 資料庫。 您也可以使用 Azure 入口網站來執行這些動作。

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

  • 監視備份和還原作業
  • 保護新增至 SQL 執行個體的新資料庫
  • 變更原則
  • 停止保護
  • 繼續保護

如果您已使用使用 CLI 在 Azure 中備份 SQL 資料庫來備份 SQL 資料庫,則您使用的是下列資源:

  • 名為 SQLResourceGroup 的資源群組
  • 名為 SQLVault 的保存庫
  • 名為 VMAppContainer;Compute;SQLResourceGroup;testSQLVM 的受保護容器
  • 備份的資料庫/項目名稱為 sqldatabase;mssqlserver;master
  • westus2 區域中的資源

Azure CLI 可讓您更輕鬆管理在 Azure VM 上執行且使用 Azure 備份的 SQL 資料庫。 下列各節會說明每項管理作業。

注意

若要深入了解支援的設定和案例,請參閱 SQL 備份支援矩陣圖

監視備份和還原作業

若要監視已完成或目前正在執行的作業 (備份或還原),可使用 az backup job list Cmdlet。 CLI 也可讓您暫停目前執行中的工作等候作業完成

az backup job list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --output table

輸出會顯示為:

Name                                  Operation              Status      Item Name       			Start Time UTC
------------------------------------  ---------------        ---------   ----------      			-------------------  
e0f15dae-7cac-4475-a833-f52c50e5b6c3  ConfigureBackup        Completed   master [testSQLVM]         2019-12-03T03:09:210831+00:00  
ccdb4dce-8b15-47c5-8c46-b0985352238f  Backup (Full)          Completed   master [testSQLVM]   		2019-12-01T10:30:58.867489+00:00
4980af91-1090-49a6-ab96-13bc905a5282  Backup (Differential)  Completed   master [testSQLVM]			2019-12-01T10:36:00.563909+00:00
F7c68818-039f-4a0f-8d73-e0747e68a813  Restore (Log)          Completed   master [testSQLVM]			2019-12-03T05:44:51.081607+00:00

變更原則

若要變更 SQL 備份設定的基礎原則,請使用 az backup policy set 命令。 此命令中的 name 參數會參考您想要變更其原則的備份項目。 在這裡,請將 SQL Database sqldatabase;mssqlserver;master 的原則取代為新的原則 newSQLPolicy。 您可以使用 az backup policy create 命令來建立新的原則。

az backup item set-policy --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --policy-name newSQLPolicy \
    --name sqldatabase;mssqlserver;master \

輸出會顯示為:

Name                                  Operation        Status     Item Name    Backup Management Type    Start Time UTC                    Duration
------------------------------------  ---------------  ---------  -----------  ------------------------  --------------------------------  --------------
ba350996-99ea-46b1-aae2-e2096c1e28cd  ConfigureBackup  Completed  master       AzureWorkload             2022-06-22T08:24:03.958001+00:00  0:01:12.435765

建立差異備份原則

若要建立差異備份原則,請搭配下列參數使用 az backup policy create 命令:

  • --backup-management-type:Azure 工作負載。
  • --workload-type:SQL DataBase。
  • --name:原則的名稱。
  • --policy:JSON 檔案,其中含有適當的排程和保留詳細資料。
  • --resource-group:保存庫的資源群組。
  • --vault-name:保存庫的名稱。

範例:

az backup policy create --resource-group SQLResourceGroup --vault-name SQLVault --name SQLPolicy --backup-management-type AzureWorkload --policy SQLPolicy.json --workload-type SQLDataBase

樣本 JSON (sqlpolicy.json):

  "eTag": null,
  "id": "/Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupPolicies/SQLPolicy",
  "location": null,
  "name": "sqlpolicy",
  "properties": {
    "backupManagementType": "AzureWorkload",
    "workLoadType": "SQLDataBase",
    "settings": {
      "timeZone": "UTC",
      "issqlcompression": false,
      "isCompression": false
    },
    "subProtectionPolicy": [
      {
        "policyType": "Full",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Sunday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T19:30:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "LongTermRetentionPolicy",
          "weeklySchedule": {
            "daysOfTheWeek": [
              "Sunday"
            ],
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 104,
              "durationType": "Weeks"
            }
          },
          "monthlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 60,
              "durationType": "Months"
            }
          },
          "yearlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "monthsOfYear": [
              "January"
            ],
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 10,
              "durationType": "Years"
            }
          }
        }
      },
      {
        "policyType": "Differential",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T02:00:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 30,
            "durationType": "Days"
          }
        }
      },
      {
        "policyType": "Log",
        "schedulePolicy": {
          "schedulePolicyType": "LogSchedulePolicy",
          "scheduleFrequencyInMins": 120
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 15,
            "durationType": "Days"
          }
        }
      }
    ],
    "protectedItemsCount": 0
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupPolicies"
} 

一旦成功建立了原則,命令的輸出會顯示您在執行命令時當作參數傳遞的原則 JSON。

您可以修改原則的下列區段,以指定差異備份所需的備份頻率和保留期。

例如:

{
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 30,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

範例:

如果您只想要在「星期六」執行差異備份並保留「60 天」,請在原則中進行下列變更:

  • retentionDuration 計數更新為 60 天。
  • 僅指定星期六做為 schedulepolicy
 {
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 60,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

保護新增至 SQL 執行個體的新資料庫

向復原服務保存庫註冊 SQL 執行個體會自動探索此執行個體中的所有資料庫。

不過,如果您稍後已將新的資料庫新增至 SQL 執行個體,請使用 az backup protectable-item initialize 命令。 此命令會探索新增的新資料庫。

az backup protectable-item initialize --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --workload-type SQLDataBase

然後使用 az backup protectable-item list Cmdlet 來列出在您 SQL 執行個體上探索到的所有資料庫。 不過,這份清單會排除已設定備份的資料庫。 一旦探索到要備份的資料庫,請參閱在 SQL 資料庫上啟用備份

az backup protectable-item list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --workload-type SQLDataBase \
	--protectable-item-type SQLDataBase \
    --output table

此清單中上會顯示您要備份的新資料庫,如下所示:

Name                            Protectable Item Type    ParentName    ServerName    IsProtected
---------------------------     ----------------------   ------------  -----------   ------------
sqldatabase;mssqlserver;db1     SQLDataBase              mssqlserver   testSQLVM	 NotProtected  
sqldatabase;mssqlserver;db2     SQLDataBase              mssqlserver   testSQLVM	 NotProtected

停止保護 SQL 資料庫

您可以透過下列程序停止保護 SQL 資料庫:

  • 停止所有未來的備份作業並刪除所有復原點。
  • 停止所有未來的備份作業但保留復原點不變。

如果您選擇保留復原點,請記住下列詳細資料:

  • 所有復原點會永遠保持不變,而停止保護但保留資料時,所有清除作業都應該停止。
  • 您需支付受保護執行個體和已使用儲存體的費用。
  • 如果您刪除資料來源,但沒有停止備份,新的備份將會失敗。

停止保護的程序詳述如下。

停止使用保留資料來進行保護

若要停止保護但保留資料,請使用 az backup protection disable 命令。

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --workload-type SQLDataBase \
    --output table

輸出會顯示為:

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

若要檢查此作業的狀態,請使用 az backup job show 命令。

停止保護且不保留資料

若要停止保護且不保留資料,請使用 az backup protection disable 命令。

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --workload-type SQLDataBase \
    --delete-backup-data true \
    --output table

輸出會顯示為:

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

若要檢查此作業的狀態,請使用 az backup job show 命令。

繼續保護

當您停止保護 SQL 資料庫但保留資料時,您可以在稍後恢復保護。 如果您沒有保留備份的資料,就無法恢復保護。

若要恢復保護,請使用 az backup protection resume 命令。

az backup protection resume --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --policy-name SQLPolicy \
    --output table

輸出會顯示為:

Name                                  ResourceGroup
------------------------------------  ---------------  
b2a7f108-1020-4529-870f-6c4c43e2bb9e  SQLResourceGroup

若要檢查此作業的狀態,請使用 az backup job show 命令。

下一步