你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 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 备份备份的 Azure VM 上运行的 SQL 数据库的管理过程。 以下各部分介绍每个管理操作。

注意

若要详细了解支持的配置和场景,请参阅 SQL 备份支持矩阵

监视备份和还原作业

使用 az backup job list 命令监视已完成或当前正在运行的作业(备份或恢复)。 通过 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 数据库 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 数据库。
  • --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 天。
  • 仅将星期六指定为 ScheduleRunDays。
 {
  "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 实例的新数据库

向恢复服务保管库注册 SAP HANA 实例会自动发现该实例上的所有数据库。

但是,如果稍后将新数据库添加到 SQL 实例,请使用 az backup protected-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 命令。

后续步骤